T-SQL: синтаксис в кавычках при построении строки SQL - PullRequest
1 голос
/ 03 марта 2011

Я строю строку SQL, в основном предложение WHERE, на лету на основе переданных параметров и выполнения встроенной строки.Итак, в конце концов это: EXEC (@strSELECT + @strFROM + @strWHERE + @strORDERBY).

Мой @strSELECT выглядит следующим образом: SET @strSELECT = 'SELECT DISTINCT FieldA, FIELDB, FIELDC'

Пока все это работает, но теперь я добавил поле вложенной функции в конец @strSELECT, поэтому весь @strSELECT теперь выглядит так: SET @strSELECT = 'SELECT DISTINCT FieldA, FIELDB, FIELDC, UPPER (ЗАМЕНИТЬ (CONVERT (VARCHAR, CAST (MyStringDateField AS DATETIME), 6),' ',' - ')) ASFormattedDate '

Я знаю, что поле новой вложенной функции работает, потому что я тестировал его без конкатенации, и я также знаю, что проблема заключается в одинарных кавычках [' ',' - '] внутри функции.Может ли кто-нибудь помочь мне с правильным синтаксисом цитаты при построении строки запроса?Thnx.

Ответы [ 3 ]

1 голос
/ 03 марта 2011

Удвойте кавычки внутри строки. Это работает для меня и возвращает "02-MAR-11":

DECLARE @strSELECT nvarchar(200)
SET @strSELECT = 'SELECT UPPER(REPLACE(CONVERT(VARCHAR, CAST(GETDATE() AS DATETIME),6),'' '',''-'')) AS FormattedDate'
EXECUTE sp_executesql @strSELECT
1 голос
/ 03 марта 2011

Чтобы вставить одиночную кавычку в строку T-SQL, вы должны добавить еще одну одинарную кавычку.Таким образом, ваш оператор @strSelect становится

SET @strSELECT = 'SELECT DISTINCT FieldA, FIELDB, FIELDC, UPPER(REPLACE(CONVERT(VARCHAR, CAST(MyStringDateField AS DATETIME),6),'' '',''-'')) AS FormattedDate'

Это не значит, что это правильный способ сделать это.Вы должны стараться использовать параметризованные запросы везде, где это возможно, чтобы избежать SQL-инъекций

1 голос
/ 03 марта 2011

Вам нужно будет сделать так, чтобы ваша вложенная функция выглядела следующим образом:

UPPER (REPLACE (CONVERT (varchar, CAST (MyStringDateField AS datetime), 6), '' '', '' - ''))

...