【发布时间】:2019-04-13 17:09:50
【问题描述】:
我有一个要求,我需要将表值参数传递给存储过程。客户端需要在不影响 C# 代码的情况下灵活地将字段添加到表值类型(即使它需要删除和重新创建所有相关的存储过程)。是否可以向 DataTable 添加比数据类型中的列更少的列? 我们使用的是 Microsoft SQL Server 2008 R2。
我试过这个:
SQL:
CREATE TYPE [dbo].[MyDataType] As Table
(
ID INT NULL,
Name NVARCHAR(50) NULL
)
CREATE PROCEDURE [dbo].[MyProcedure]
(
@myData As [dbo].[MyDataType] Readonly
)
AS
Begin
Select * FROM @myData
End
C#:
DataTable myDataTable = new DataTable("MyDataType");
myDataTable.Columns.Add("Id", typeof(Int32));
myDataTable.Rows.Add(1);
myDataTable.Rows.Add(2);
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@myData";
parameter.SqlDbType = System.Data.SqlDbType.Structured;
parameter.Value = myDataTable;
command.Parameters.Add(parameter);
我收到以下异常:
A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
Additional information: Trying to pass a table-valued parameter with 1 column(s) where the corresponding user-defined table type requires 2 column(s).
【问题讨论】: