SQL Server - передача табличного параметра с вычисляемыми столбцами - PullRequest
6 голосов
/ 07 октября 2011

Как передать параметр с табличным значением в хранимую процедуру с вычисляемым столбцом?

У меня есть тип данных таблицы, который я пытаюсь передать 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);

(Примечание: все отлично работает без вычисляемого столбца.)

1 Ответ

1 голос
/ 07 октября 2011

AFAIK, Вы не можете изменять табличные параметры внутри хранимой процедуры. Если вам необходимо выполнить вычисление и вернуть его из процедуры, вам нужно передать параметр с табличным значением без столбца с нулевыми значениями, создать копию с идентичной структурой плюс дополнительный столбец, который вам нужен, и вернуть новую таблицу с дополнительный столбец или столько дополнительных столбцов, сколько вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...