T-SQL вышла из строя - PullRequest
       29

T-SQL вышла из строя

1 голос
/ 17 мая 2010

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

То же самое

INSERT INTO @tableValuedVariable (var1, var2, var3, var4, var5)
         EXEC [dbo].StoredProcedure1;

INSERT INTO @tableValuedVariable (var1, var2, var5)
         EXEC [dbo].StoredProcedure2;

Вы, наверное, уже можете сказать, что я собираюсь спросить. В основном StoredProcedure2 возвращает только несколько значений, которые таблица содержит для хранения, и я хотел бы, чтобы эти другие переменные были просто нулевыми (как определено по умолчанию). Только SQL жалуется, что я не указываю все переменные, доступные для этой таблицы.

Наборы возвращаемых данных могут быть весьма значительными, поэтому я бы хотел избежать циклов и тому подобное по очевидным причинам.

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 17 мая 2010

У вас есть список всех столбцов в предложении INSERT, чтобы соответствовать всем столбцам из сохраненного процесса.

Теперь, если хранимый процесс возвращает var1, var2, var5, тогда нет необходимости указывать var3, var4 в предложении INSERT, если они имеют значение NULLable. (Изменить: конечно, как указал Майк Бертон, произойдет сбой, если столбцы НЕ НЕДЕЙСТВИТЕЛЬНЫ)

Если хранимый процесс возвращает var1, var2, var3, var4, var5, тогда вам нужно все 5 в предложении INSERT: вы не можете игнорировать столбцы из хранимого процесса и разрешить их по умолчанию.

Вы можете изменить сохраненный процесс на udf и SELECT var1, var2, var5 FROM mynewUDF()

0 голосов
/ 17 мая 2010

Это работает для меня:

CREATE PROCEDURE prc_test_1
AS
        SELECT  1 AS id, 2 AS id2

GO

CREATE PROCEDURE prc_test_2
AS
        SELECT  1 AS id

GO

DECLARE @tv TABLE (id INT, id2 INT)

INSERT
INTO    @tv
EXEC    prc_test_1

INSERT
INTO    @tv (id)
EXEC    prc_test_2

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