Как передать параметр с табличным значением в хранимую процедуру с вычисляемым столбцом?
У меня есть тип данных таблицы, который я пытаюсь передать DataTable
в хранимый процесс.У меня все столбцы совпадают по порядку и типу данных, за исключением вычисляемого столбца.
Если я опускаю этот столбец из моего DataTable
, я получаю эту ошибку: System.Data.SqlClient.SqlException (0x80131904): Trying to pass a table-valued parameter with 3 column(s) where the corresponding user-defined table type requires 4 column(s).
Если я включаю столбец с нулевыми значениями, я получаю это: System.Data.SqlClient.SqlException (0x80131904): The column "TransformationSum" cannot be modified because it is either a computed column or is the result of a UNION operator.
Еще не пробовал возиться с какими-либо различными свойствами конкретного 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);
(Примечание: все отлично работает без вычисляемого столбца.)