2012-05-02 15 views

Respuesta

57
  1. Crear tipo en SQL Server:

    CREATE TYPE [dbo].[MyDataType] As Table 
    (
        ID INT, 
        Name NVARCHAR(50) 
    ) 
    
  2. Crear Procedimiento:

    CREATE PROCEDURE [dbo].[MyProcedure] 
    (
        @myData As [dbo].[MyDataType] Readonly 
    ) 
    AS 
    
    BEGIN 
        SELECT * FROM @myData 
    END 
    
  3. Crear DataTable en C#:

    DataTable myDataTable = new DataTable("MyDataType"); 
    myDataTable.Columns.Add("Name", typeof(string)); 
    myDataTable.Columns.Add("Id", typeof(Int32)); 
    myDataTable.Rows.Add("XYZ", 1); 
    myDataTable.Rows.Add("ABC", 2); 
    
  4. Crear SQL Parámetro:

    SqlParameter parameter = new SqlParameter(); 
    parameter.ParameterName = "@myData"; 
    parameter.SqlDbType = System.Data.SqlDbType.Structured; 
    parameter.Value = myDataTable; 
    command.Parameters.Add(parameter); 
    
+0

Esto sólo es aplicable en SQL Server 2008 –

+3

mismo está trabajando bien con SQL Server 2012 también. –

+0

Quise decir que esto está disponible solo para servidores Sql 2008 y superiores, y que funcionaría también en 2012. –

9

He intentado esto y recibió la excepción:

El parámetro tipo de tabla '@MyDataType' debe tener un nombre de tipo válido.

que tuvieron que establecer la propiedad "nombre de tipo" de la SqlParameter:

parameter.TypeName = "MyDataType"; 
+0

sí. tienes razón, debe establecerse "TypeName". –

+0

Agregar el esquema db como parte del nombre de la tabla lo hizo por mí: DataTable myDataTable = new DataTable ("dbo.MyDataType"); – noontz

-3

Puede prefijar con Exec

using(SqlConnection con = new SqlConnection("Server=.;database=employee;user=sa;password=12345")) 
    { 
     SqlCommand cmd = new SqlCommand(" exec ('drop table '[email protected])" , con); 
     cmd.Parameters.AddWithValue("@tab" ,"Employee"); 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
Cuestiones relacionadas