Как написать пакетный SQL-запрос в процедуре - PullRequest
0 голосов
/ 01 декабря 2010

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

Спасибо

CREATE PROCEDURE UPDATE_ALL_STATUS
    @IDs varchar(MAX) = null,
    @status int = null
AS
BEGIN
    IF @IDs is null
    BEGIN
        RETURN
    END

    DECLARE @SQL VARCHAR(MAX)

    SET @SQL = 'UPDATE mytable SET status = ' + @status + ' WHERE id in (' + @IDs + ')'
    EXECUTE @SQL
END

1 Ответ

4 голосов
/ 01 декабря 2010

Вместо динамического SQL (который также уязвим для Атаки SQL-инъекций ) и передачи в VARCHAR (MAX), рассмотрите возможность использования Таблица значений параметров :

-- Creates the TVP type - only needed once!
CREATE TYPE IntegerTableType AS TABLE 
( Identities INT );
GO

CREATE PROCEDURE UPDATE_ALL_STATUS
    @IDs IntegerTableType READONLY,
    @status int = null
AS
BEGIN

    UPDATE mytable 
    SET status = @status
    WHERE id IN
     (SELECT Identities FROM @IDs)

END

В этой статье MSDN показано, как вызвать их из вашего кода .NET.

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