SQL - хранимый Proc для обновления таблицы из табличной переменной - PullRequest
0 голосов
/ 17 июля 2011

У меня есть хранимая процедура, которая вставляет записи в таблицу, используя значения из моей табличной переменной. (Переменная таблицы отправляется в SQL из ASP.NET). Она отлично работает и выглядит следующим образом ...

CREATE PROCEDURE sp_SaveResponses 
(
@TableVariable SaveResponsesTableType READONLY
)
AS
BEGIN
INSERT INTO tbl_Responses
(
assessmentid, questionid, answerid
)
SELECT assessmentid, questionid, answerid
FROM @TableVariable
END

Вышеприведенное вставляет одну запись в tbl_Responses для каждой строки в @TableVariable.

Проблема Вместо INSERT я хотел бы выполнить ОБНОВЛЕНИЕ, но я не могу понять синтаксис правильно.

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

UPDATE С некоторыми полезными советами я смог решить эту проблему ниже ...

Ответы [ 3 ]

3 голосов
/ 17 июля 2011

Вы можете попробовать это (я не проверял) -

CREATE PROCEDURE sp_SaveResponses 
(
@TableVariable SaveResponsesTableType READONLY
)
AS
BEGIN
UPDATE tbl_Responses set questionid = @TableVariable.questionid
FROM @TableVariable
WHERE @TableVariable.assessmentid = tbl_Response.assessmentid 
END
1 голос
/ 17 июля 2011

Спасибо @ ipr1010 и @ cob666, ответы которых привели меня в правильном направлении ... Вот решение.

UPDATE tbl_Responses SET answerid = T1.answerid
FROM @TableVariable T1
WHERE tbl_Responses.assessmentid = T1.assessmentid AND tbl_Responses.questionid = T1.questionid

Именование @TableVariable T1 решило проблему «необходимо объявить скалярную переменную ...». Мне также нужно было обновить мое предложение WHERE, или все значения были обновлены с первым значением в @TableVariable.

Хотелось бы, чтобы вы проголосовали за вас, ребята, но, очевидно, мой уличный авторитет слишком слаб!

1 голос
/ 17 июля 2011

В зависимости от того, что объединение между переменной таблицы и таблицей, которую нужно обновить:

CREATE PROCEDURE sp_SaveResponses 
(
@TableVariable SaveResponsesTableType READONLY
)
AS
BEGIN
    UPDATE 
        tbl_Responses 
    SET 
        questionid = @TableVariable.questionid
    FROM 
        @TableVariable T1
        JOIN tbl_Responses T2 ON T1.assessmentid = T2.assessmentID
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...