首页 > 解决方案 > 在 SQL 存储过程中使用用户定义的表 - 无效的数据类型

问题描述

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

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

这样我就可以从 ac# 程序发送数据表,而不是单独插入每一行。

存储过程

CREATE PROCEDURE [dbo].[Upload_AddBulkProducts]
@uploadedTable CSV_ADDProducts readonly
AS
    INSERT INTO [dbo].[Products]
     SELECT * FROM @uploadedTable
GO

Error = undefined variable 我在尝试创建存储过程时遇到的错误

用户定义表

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

标签: c#sqluser-defined-types

解决方案


在 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);

推荐阅读