在SQL存储过程中使用用户定义的表-无效的数据类型

问题描述

我一直在努力使已定义的数据表被接受为存储过程参数之一的变量。

第一次使用用户定义的表,所以我可能犯了语法错误

这样一来,我就可以从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);