Подстановочный знак% динамической SQL% вызывает «Неверное имя столбца» в Visual Studio - PullRequest
0 голосов
/ 18 сентября 2009

Sproc в SQL Server 2005 анализирует, компилирует и успешно работает через SQL Management Studio. Я недавно импортировал схему в Visual Studio Database Edition 2008 и пытался «построить» проект.

Параметры сортировки для базы данных, из которой я создал сценарий, и для временной базы данных времени разработки одинаковы (SQL_Latin1_General_CP1_CI_AS)

Код в настоящее время выглядит следующим образом:

DECLARE @SQL varchar(2000)
IF  @Username <> ''
    SET @SQL = @SQL + ' AND Username LIKE ' + "'" + @Username + "%'"

Я получаю эти ошибки:

 Error  261 TSD4001: Invalid column name '''. (SQL error = 207) 
 Error  262 TSD4001: Invalid column name '%''. (SQL error = 207)

Есть ли одобренный способ использования подстановочных знаков в динамической генерации SQL, который не нарушит процесс сборки Visual Studio?

Спасибо

Ответы [ 4 ]

4 голосов
/ 18 сентября 2009

Попробуйте заменить двойные кавычки на правильное количество одинарных кавычек.

0 голосов
/ 18 сентября 2009

Спасибо за молниеносные ответы всем, очень помогли Митч и MJV. Теперь сделайте инъекцию sql, чтобы доказать коллеге, что это был кодекс!

0 голосов
/ 18 сентября 2009

Вы делаете это в C # или VB.Net?

в любом случае, Замените каждую одинарную кавычку на 2 одинарные кавычки:

в вашем клиентском коде, если имя пользователя является переменной на стороне клиента, где вы называете это вам нужно

  SQL = SQL + " AND Username LIKE ''" +  username + "%''";  c#
  SQL = SQL + " AND Username LIKE ''" +  username + "%''"   vb.Net 

или, если вы используете параметры (@UserName)

  SQL = SQL + " AND Username LIKE ''@Username%''";  c#
  SQL = SQL + " AND Username LIKE ''@Username%''"   vb.Net 
0 голосов
/ 18 сентября 2009

Хороший улов Митч Уит.

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

В частности, вы хотите:

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