Вставка значений в Dynamic Sql в хранимой процедуре. Куда делятся метки? - PullRequest
1 голос
/ 24 июня 2009

Я пытаюсь создать SQL-оператор в TSQL, который выглядит следующим образом:

INSERT INTO UsersTable (UserName) VALUES (@UserName)

Это просто, пока вы не попытаетесь сделать это динамически в T-Sql, и @UserName не будет varchar

Это выглядит так:

SELECT @SQLInsert = 'INSERT INTO UsersTable (UserName) ' +
                    'VALUES (' + @UserName + ')'

За исключением, конечно, это не работает. Сколько тиков мне нужно, чтобы создать тики в строке ???? Сводит меня с ума!

Ответы [ 4 ]

4 голосов
/ 24 июня 2009

Я думаю, что проблема в том, что вы неправильно цитируете строку @UserName. Лучший способ (и безопасный способ) сделать это - использовать параметризованный запрос, используя sp_executesql . Ниже описано, как это можно сделать с помощью sp_executesql (не проверено). Надеюсь, это поможет.

DECLARE @SQLInsert NVARCHAR(500)
DECLARE @paramDef NVARCHAR(500) 

SET @SQLInsert = 'INSERT INTO UsersTable (UserName)  VALUES ( @InsUserName )'

SET @paramDef = '@InsUserName NVARCHAR(50)'

EXECUTE sp_executesql @SQLInsert, @paramDef,
                      @InsUserName = @UserName;
1 голос
/ 24 июня 2009

Буквальные одинарные кавычки в строках представлены двумя последовательными одинарными кавычками.

См. Константы (Transact-SQL) .

0 голосов
/ 24 июня 2009

То, что вы пытаетесь сделать, уязвимо для SQL-инъекций:

http://en.wikipedia.org/wiki/SQL_injection

Свернуть ваше значение в кавычки очень небезопасно. Безопаснее использовать sp_executesql с параметрами или не использовать его вообще: http://msdn.microsoft.com/en-us/library/ms188001.aspx

0 голосов
/ 24 июня 2009

Мне любопытно, почему вы помещаете «+» между первой частью и ЗНАЧЕНИЯМИ. В этом нет необходимости, но кроме этого следуйте ответу Джастина.

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