gpt4 book ai didi

c# - SQL Server - 传递带有计算列的表值参数

转载 作者:太空狗 更新时间:2023-10-29 21:59:13 24 4
gpt4 key购买 nike

如何将表值参数传递给具有计算列的存储过程?

我有一个表数据类型,我正在尝试将 DataTable 传递给存储过程。除了计算列之外,我的所有列都按顺序和数据类型匹配。

如果我将该列从我的 DataTable 中删除,我会收到此错误:System.Data.SqlClient.SqlException (0x80131904):尝试传递具有 3 列的表值参数,而相应的用户定义表类型需要 4 列。

如果我包含具有空值的列,我会得到:System.Data.SqlClient.SqlException (0x80131904): The column "TransformationSum"cannot be modified because it is either an computed column or is the result of a UNION 运算符。

还没有尝试摆弄特定 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

还有我设置参数的代码:

    var parm = cmd.CreateParameter();
parm.ParameterName = "@pData";
parm.SqlDbType = SqlDbType.Structured;
parm.TypeName = "[dbo].[DataPoint]";
parm.Value = myDataTable;
cmd.Parameters.Add(parm);

(注意:没有计算列一切正常。)

最佳答案

据我所知,您不能在存储过程中修改表值参数。如果您需要执行计算并从 proc 中返回它,则需要传递不带空值列的表值参数,创建具有相同结构的副本加上您需要的额外列并返回新表额外的列或您需要的任意多的额外列。

关于c# - SQL Server - 传递带有计算列的表值参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com