2012-05-02 53 views

回答

57
  1. 在SQL Server中創建類型:

    CREATE TYPE [dbo].[MyDataType] As Table 
    (
        ID INT, 
        Name NVARCHAR(50) 
    ) 
    
  2. 創建過程

    CREATE PROCEDURE [dbo].[MyProcedure] 
    (
        @myData As [dbo].[MyDataType] Readonly 
    ) 
    AS 
    
    BEGIN 
        SELECT * FROM @myData 
    END 
    
  3. 在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. 創建SQL參數

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

這只是在SQL Server是適用2008年 –

+3

同樣是工作的罰款前綴與SQL Server 2012一樣。 –

+0

我的意思是隻有Sql server 2008及以上版本,所以它也可以在2012工作。 –

9

我嘗試這樣做,接收到異常:

表類型參數「@MyDataType」必須具有有效的類型名稱。

我不得不設置的SqlParameter的 「類型名」 屬性:

parameter.TypeName = "MyDataType"; 
+0

是的。你是對的,必須設置「TypeName」。 –

+0

添加數據庫模式作爲表名的一部分爲我做了:DataTable myDataTable = new DataTable(「dbo.MyDataType」); – noontz

-3

你可以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(); 
    }