如果您使用的是SQL Server 2008,则有一个称为“用户定义的表类型”的新功能。这是一个如何使用它的示例:
创建您的用户定义表类型:
CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAr](MAX) NULL);
接下来,您需要在存储过程中正确使用它:
CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READonLYASBEGIN -- Just return the items we passed in SELECt l.Item FROM @list l;END
最后是在C#中使用它的一些sql:
using (var con = new SqlConnection(connstring)){ con.Open(); using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con)) { using (var table = new DataTable()) { table.Columns.Add("Item", typeof(string)); for (int i = 0; i < 10; i++) table.Rows.Add("Item " + i.ToString()); var pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table; cmd.Parameters.Add(pList); using (var dr = cmd.ExecuteReader()) { while (dr.Read()) Console.WriteLine(dr["Item"].ToString()); } } }}要从SSMS执行此操作
DECLARE @list AS StringListINSERT INTO @list VALUES ('Apple')INSERT INTO @list VALUES ('Banana')INSERT INTO @list VALUES ('Orange')-- Alternatively, you can populate @list with an INSERT-SELECtINSERT INTO @list SELECT Name FROM FruitsEXEC sp_UseStringList @list


