问题描述
我一直在努力使已定义的数据表被接受为存储过程参数之一的变量。
这样一来,我就可以从c#程序发送数据表,而不必单独插入每一行。
存储过程
CREATE PROCEDURE [dbo].[Upload_AddBulkProducts]
@uploadedTable CSV_ADDProducts readonly
AS
INSERT INTO [dbo].[Products]
SELECT * FROM @uploadedTable
GO
错误=未定义变量 The error i get when trying to create the stored procedure
用户定义表
CREATE TYPE [dbo].[CSV_ADDProducts] AS TABLE(
[Product Item] [nvarchar](50) NULL,[Product SKU] [bigint] NULL,[Product Name] [nvarchar](max) NULL,[Product Active] [nchar](10) NULL,[Product Selling Price] [money] NULL,[Product Description] [nvarchar](max) NULL,[Product Purchase Description] [nvarchar](max) NULL,[Product VAT Code ID] [bigint] NOT NULL,[Product Last Update] [datetime] NULL
)
GO
解决方法
在T-SQL的上下文中,您的代码有效。可以创建类型和过程。
然后,在C#代码中使用以下代码:
DataTable dt = new DataTable();
dt.Columns.Add("Product Item",typeof (string));
//add other columns here
SqlParameter param = new SqlParameter("@uploadedTable",SqlDbType.Structured)
{
TypeName = "dbo.userdefinedtabletype",Value = dt
};
sqlComm.Parameters.Add(param);