C# SQL Server-通过计算列传递表值参数
如何将表值参数传递给具有计算列的存储过程 我有一个表数据类型,我正试图将C# SQL Server-通过计算列传递表值参数,c#,sql-server-2008,ado.net,C#,Sql Server 2008,Ado.net,如何将表值参数传递给具有计算列的存储过程 我有一个表数据类型,我正试图将DataTable传递给存储的进程。我的所有列都按照顺序和数据类型匹配,除了一个计算列 如果我将该列保留在我的数据表中会出现以下错误: System.Data.SqlClient.SqlException(0x80131904):尝试传递具有3列的表值参数,其中相应的用户定义表类型需要4列。 如果包含具有空值的列,则会得到以下结果:System.Data.SqlClient.SqlException(0x80131904):
DataTable
传递给存储的进程。我的所有列都按照顺序和数据类型匹配,除了一个计算列
如果我将该列保留在我的数据表中
会出现以下错误:
System.Data.SqlClient.SqlException(0x80131904):尝试传递具有3列的表值参数,其中相应的用户定义表类型需要4列。
如果包含具有空值的列,则会得到以下结果:System.Data.SqlClient.SqlException(0x80131904):无法修改列“TransformationSum”,因为它是计算列或是联合运算符的结果。
尚未尝试处理特定DataColumn
的任何各种属性
表类型定义:
CREATE TYPE [dbo].[DataPoint] AS TABLE
(
[Id] [int] NOT NULL,
[RawDataPoint] [decimal](18, 9) NULL,
[TransformedDataPoint] [decimal](18, 9) NULL,
[TransformationSum] AS ([RawDataPoint]-[TransformedDataPoint]),
PRIMARY KEY ([Id])
)
CREATE PROCEDURE [report].[spRptBubblePlot]
@pData [dbo].[DataPoint] READONLY,
....
AS
BEGIN
....
END
以及存储的过程定义:
CREATE TYPE [dbo].[DataPoint] AS TABLE
(
[Id] [int] NOT NULL,
[RawDataPoint] [decimal](18, 9) NULL,
[TransformedDataPoint] [decimal](18, 9) NULL,
[TransformationSum] AS ([RawDataPoint]-[TransformedDataPoint]),
PRIMARY KEY ([Id])
)
CREATE PROCEDURE [report].[spRptBubblePlot]
@pData [dbo].[DataPoint] READONLY,
....
AS
BEGIN
....
END
以及设置参数的我的代码:
var parm = cmd.CreateParameter();
parm.ParameterName = "@pData";
parm.SqlDbType = SqlDbType.Structured;
parm.TypeName = "[dbo].[DataPoint]";
parm.Value = myDataTable;
cmd.Parameters.Add(parm);
(注意:没有计算列,一切正常。)好的,您不能在存储过程中修改表值参数。如果需要执行计算并从proc中返回,则需要传递表值参数,而不传递具有空值的列,创建一个具有相同结构的副本加上所需的额外列,并返回具有额外列或所需额外列数的新表。“这正是我所担心的。哦,好吧,至少这不是一个非常复杂的计算。