MS SQL 2008: рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЬреИрд╕реЗ рдХрд┐ sql_variant (рдЕрднреА рддрдХ?) рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде ADO.NET рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ

sql_variant - рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЬреЛ SQL рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред



рдпрд╣ рд╡рд┐рдХрд╕рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рдЧреБрдгреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╕рдордпред



ADO.NET рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рд╕рдВрднрд╡ рд╕реБрд╡рд┐рдзрд╛ рдпрд╣ рд╣реИ рдХрд┐ sql_variant рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реИред рдпрджрд┐ рдЖрдк рдкреНрд░реЗрд╖рд┐рдд рдорд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддрд░реНрдХ рдХреЛ рд╢рд╛рдЦрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ SQL_VARIANT_PROPERTY рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛рдПрдБ рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред







рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП , рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдореИрдк рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред .NET рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ SqlDbType.Variant рдпрд╛ DbType.Object рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ , рд╣рдо рдкреНрд░рдмрдВрдзрди рдФрд░ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВред



  1. рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдБ:

    CREATE TYPE [dbo].[GenericList] AS TABLE([value] [sql_variant] NOT NULL)



  2. рд╣рдо рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧреА:

    CREATE PROCEDURE [dbo].[ParseGenericList]

    @list GenericList readonly

    AS

    BEGIN

    SET NOCOUNT ON;

    SELECT value from @list

    END






  3. рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рд╣реИрдВрдбрд▓ рдХреЛ рд░рдЧрдбрд╝рдХрд░, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .NET рдХреЛрдб рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

    DataTable table = new DataTable("GenericList");

    table.Columns.Add("value", typeof(object));



    table.Rows.Add("string");

    table.Rows.Add(DateTime.Now);

    table.Rows.Add(145);



    using (SqlCommand command = connection.CreateCommand()) // created before

    {

    command.CommandText = "dbo.ParseGenericList";

    command.CommandType = CommandType.StoredProcedure;

    command.Parameters.AddWithValue("@list", table);

    conn.Open();

    using (SqlDataReader r = command.ExecuteReader())

    while (r.Read())

    Console.WriteLine(r.GetValue(0));

    }






рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдкреЗрдХреНрд╖рд┐рдд рддреАрди рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдУрдмреНрд▓реЛрдорд┐рдВрдЧреЛ рдкрдХреНрд╖реА рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЙрдбрд╝рддрд╛ рд╣реИ:

"value" . "Object"







рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдХреНрд░рдорд╢рдГ рдСрдмреНрдЬреЗрдХреНрдЯ \ sql_variant рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ \ nvarchar рдпрд╛ рдлреНрд▓реЛрдЯ \ рдлреНрд▓реЛрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдПрдХ рдзрдорд╛рдХреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред



рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ:

declare @list dbo.GenericList;

insert into @list(value) select cast(0 as bit);

insert into @list(value) select cast('bla' as nvarchar(3));

insert into @list(value) select cast(0.15 as float);



exec dbo.ParseGenericList @list








рдЧреБрдЧреНрд▓рд┐рдВрдЧ рдХреЗ рдХреБрдЫ рдорд┐рдирдЯ Microsoft рддрдХрдиреАрдХреА рд╕рдорд░реНрдерди рдореЗрдВ рдПрдХ рдЦреБрд▓реА рд░рд┐рдкреЛрд░реНрдЯ рдкрд╛рддреЗ рд╣реИрдВ:

klats



рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЗ рдЕрдВрджрд░, рдПрдордПрд╕ рдЙрди рдкреИрдЪ рдХреЗ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдПрдХ (рд╕реАрдЯреА рдХреЗ рд▓рд┐рдП) рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдерд╛, рджреВрд╕рд░реЗ (.net рдХреЗ рд▓рд┐рдП) рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдмрд┐рдирд╛ред рдЪрд░реНрдЪрд╛ рд╕реНрд╡рдпрдВ рдХрд╣рддреА рд╣реИ рдХрд┐ рдмрдЧ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдореБрджреНрджрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдпрд╣рд╛рдБ рдРрд╕реА рд╣реА рдПрдХ рдЕрдкреНрд░рд┐рдп рдХрд╣рд╛рдиреА рд╣реИред рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрдИ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдмреИрд╕рд╛рдЦреА):



рдпрд╣рд╛рдБ рдПрдХ рдмрдорд░ рд╣реИред рдЕрд╕рд▓ рдореЗрдВ, рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЖрдХреНрд░реЛрд╢ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдПрдХ рднрд░рд╛ рд╣реБрдЖ рдмреЛрд▓реНрдЯ рд╣реИред



All Articles