Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 использование одинарных кавычек  [new]
garvy
Member

Откуда: Москва
Сообщений: 791
мне надо в команду exec (@sql) предать строку типа 'SELECT что-то там FROM что-то там WHERE Поле = ' + @ТекстоваяПеременная

Как мне правильно поставить кавычки в случае конкатенации, ведь по правилам должно быть where поле = 'текст', те. надо заключать в одинарные кавычки?
6 дек 05, 09:32    [2143739]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
это?
select ' ''mytext'' '
6 дек 05, 09:41    [2143759]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10939
есть еще вариант: select 'Д' + char(34) + 'артаньян'
6 дек 05, 09:58    [2143798]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10939
простите наврал 34 это двойная 39 одиночная
6 дек 05, 10:02    [2143811]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
garvy
Member

Откуда: Москва
Сообщений: 791
не совсем так, мне надо фразу типа

1 ' SELECT Поле1 From Таблица 1 WHERE Поле1 = ' + @текстовая переменная =============== так писать?

или же как то так
2. ' SELECT Поле1 From Таблица 1 WHERE Поле1 = ' ' + @текстовая переменная + ' ' ' ?
6 дек 05, 11:31    [2144252]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
Jem
Member

Откуда:
Сообщений: 735
1
6 дек 05, 11:33    [2144262]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
Jem
Member

Откуда:
Сообщений: 735
Наврал!
вот решение:

declare @s nvarchar(300)
set @s='мяу'

select 'select * from Where id=''' + @S + ''''
6 дек 05, 11:38    [2144291]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
garvy
Member

Откуда: Москва
Сообщений: 791
Спасибо
6 дек 05, 11:45    [2144323]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
garvy
Member

Откуда: Москва
Сообщений: 791
Jem
Наврал!
вот решение:

declare @s nvarchar(300)
set @s='мяу'

select 'select * from Where id=''' + @S + ''''



Поторопился со спасибо - на этот вариант выдает ошибку
6 дек 05, 12:29    [2144556]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
%))) текст ошибки в студию!!!!!
-------------------------------------
Jedem Das Seine
6 дек 05, 12:30    [2144564]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
garvy
Member

Откуда: Москва
Сообщений: 791
И вообще на всякие комбинации одинарных кавычек до и после выдает ошибки.
6 дек 05, 12:32    [2144581]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
Glory
Member

Откуда:
Сообщений: 104764
garvy
И вообще на всякие комбинации одинарных кавычек до и после выдает ошибки.

на _всякие_ комбинации и не такое может выдавать. В вот на совершенно конкретные - не выдает
6 дек 05, 12:34    [2144596]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Ну приведите же наконец ВАШ КОД КОТОРЫЙ ВЫДАЕТ ОШИБКУ И САМУ ОШИБКУ
-------------------------------------
Jedem Das Seine
6 дек 05, 12:40    [2144637]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
garvy
Member

Откуда: Москва
Сообщений: 791
Первоначальная строка
SET @SQL = ' INSERT INTO VS_1.dbo.[СлужебнаяВыборИз1С] (код1С, Наименование)
SELECT ' + @bd + '.dbo.' + 'SC112.DESCR AS Договор, ' + @bd + '.dbo.' + 'SC112.ID AS КодДоговора FROM ' + @bd + '.dbo.' + 'SC48457 RIGHT OUTER JOIN
' + @bd + '.dbo.' + 'SC133 ON ' + @bd + '.dbo.' + 'SC48457.SP48459 = ' + @bd + '.dbo.' + 'SC133.CODE LEFT OUTER JOIN
' + @bd + '.dbo.' + 'SC112 ON ' + @bd + '.dbo.' + 'SC133.ID = ' + @bd + '.dbo.' + 'SC112.PARENTEXT WHERE ' + @bd + '.dbo.' + 'SC48457.SP48458 = ' + @hst

Check syntax ошибок не выдает
Запрос не возвращает ни одной строки
Этот же запрос переписанный в Query analizer с конкретными параметрами возвращает одну строку


строка
SET @SQL = ' INSERT INTO VS_1.dbo.[СлужебнаяВыборИз1С] (код1С, Наименование)
SELECT ' + @bd + '.dbo.' + 'SC112.DESCR AS Договор, ' + @bd + '.dbo.' + 'SC112.ID AS КодДоговора FROM ' + @bd + '.dbo.' + 'SC48457 RIGHT OUTER JOIN
' + @bd + '.dbo.' + 'SC133 ON ' + @bd + '.dbo.' + 'SC48457.SP48459 = ' + @bd + '.dbo.' + 'SC133.CODE LEFT OUTER JOIN
' + @bd + '.dbo.' + 'SC112 ON ' + @bd + '.dbo.' + 'SC133.ID = ' + @bd + '.dbo.' + 'SC112.PARENTEXT WHERE ' + @bd + '.dbo.' + 'SC48457.SP48458 = ' ' + @hst + ' ' ' '

выдает ошибку Incorrect syntax near ' '
6 дек 05, 12:43    [2144656]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
garvy
Member

Откуда: Москва
Сообщений: 791
sorry, вторая строка -
' INSERT INTO VS_1.dbo.[СлужебнаяВыборИз1С] (код1С, Наименование)
SELECT ' + @bd + '.dbo.' + 'SC112.ID AS КодДоговора, ' + @bd + '.dbo.' + 'SC48457 , ' + @bd + '.dbo.' + 'SC112.DESCR AS Договор FROM RIGHT OUTER JOIN
' + @bd + '.dbo.' + 'SC133 ON ' + @bd + '.dbo.' + 'SC48457.SP48459 = ' + @bd + '.dbo.' + 'SC133.CODE LEFT OUTER JOIN
' + @bd + '.dbo.' + 'SC112 ON ' + @bd + '.dbo.' + 'SC133.ID = ' + @bd + '.dbo.' + 'SC112.PARENTEXT WHERE ' + @bd + '.dbo.' + 'SC48457.SP48458 = ' ' ' + @hst + ' ' ' '
6 дек 05, 12:45    [2144679]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Вместо exec сделайте print и проанализируйте строку запроса.
6 дек 05, 12:46    [2144680]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
Glory
Member

Откуда:
Сообщений: 104764
garvy
строка
SET @SQL = ' INSERT INTO VS_1.dbo.[СлужебнаяВыборИз1С] (код1С, Наименование)
SELECT ' + @bd + '.dbo.' + 'SC112.DESCR AS Договор, ' + @bd + '.dbo.' + 'SC112.ID AS КодДоговора FROM ' + @bd + '.dbo.' + 'SC48457 RIGHT OUTER JOIN
' + @bd + '.dbo.' + 'SC133 ON ' + @bd + '.dbo.' + 'SC48457.SP48459 = ' + @bd + '.dbo.' + 'SC133.CODE LEFT OUTER JOIN
' + @bd + '.dbo.' + 'SC112 ON ' + @bd + '.dbo.' + 'SC133.ID = ' + @bd + '.dbo.' + 'SC112.PARENTEXT WHERE ' + @bd + '.dbo.' + 'SC48457.SP48458 = ' ' + @hst + ' ' ' '

выдает ошибку Incorrect syntax near ' '

Еще бы он не выдавал. Откуда там эта кавычка ?

SET @SQL = ' INSERT INTO VS_1.dbo.[СлужебнаяВыборИз1С] (код1С, Наименование)
SELECT ' + @bd + '.dbo.' + 'SC112.DESCR AS Договор, ' + @bd + '.dbo.' + 'SC112.ID AS КодДоговора FROM ' + @bd + '.dbo.' + 'SC48457 RIGHT OUTER JOIN
' + @bd + '.dbo.' + 'SC133 ON ' + @bd + '.dbo.' + 'SC48457.SP48459 = ' + @bd + '.dbo.' + 'SC133.CODE LEFT OUTER JOIN
' + @bd + '.dbo.' + 'SC112 ON ' + @bd + '.dbo.' + 'SC133.ID = ' + @bd + '.dbo.' + 'SC112.PARENTEXT WHERE ' + @bd + '.dbo.' + 'SC48457.SP48458 = ' ' + @hst + ' ' ' '
6 дек 05, 12:47    [2144689]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
SET @SQL = ' INSERT INTO VS_1.dbo.[СлужебнаяВыборИз1С] (код1С, Наименование)
SELECT ' + @bd + '.dbo.SC112.DESCR AS Договор, '
+ @bd + '.dbo.SC112.ID AS КодДоговора FROM '
+ @bd + '.dbo.SC48457 RIGHT OUTER JOIN
' + @bd + '.dbo.' + 'SC133 ON ' + @bd + '.dbo.' + 'SC48457.SP48459 = ' + @bd + '.dbo.' + 'SC133.CODE LEFT OUTER JOIN
' + @bd + '.dbo.' + 'SC112 ON ' + @bd + '.dbo.' + 'SC133.ID = ' + @bd + '.dbo.' + 'SC112.PARENTEXT WHERE ' + @bd + '.dbo.' + 'SC48457.SP48458 = ' +''''+ @hst +''''

-------------------------------------
Jedem Das Seine
6 дек 05, 12:48    [2144693]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
Jem
Member

Откуда:
Сообщений: 735
:)
6 дек 05, 12:51    [2144717]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
DamirS
Member

Откуда:
Сообщений: 181
garvy

+ '.dbo.' + 'SC48457.SP48458 = ' ' + @hst + ' ' ' '

При генерации sql-выражения (динамический sql-запрос) нужно учитывать, что текстовые параметры тоже могут содержать кавычки.
Поэтому, вместо ''+@hst+''
Лучше:
+ QUOTENAME (REPLACE(@hst,'''',''), '''')
6 дек 05, 13:20    [2144883]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
BrokenPot
Member

Откуда: Киев
Сообщений: 1407
Если хотите получить кавычку, нужно ставить четыре! :)
Например:
set @SQL='insert #log(id_x_aud,table_name,column_name,'+@pkey_column_name+',value_previous,
				update_date,host_name,app_name)'+
				'select newid(),'+''''+@table_name+''''+','+
                       ''''+'Для колонки '+@russian_column_name+' відсутня таблиця аудиту'+''''+','+
                      'null,null,null,null,null'
      exec(@SQL)
6 дек 05, 14:52    [2145314]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
AndreyF
Member

Откуда:
Сообщений: 432
BrokenPot
Если хотите получить кавычку, нужно ставить четыре! :)


Неправильно! Две! Остальные две в твоем примере это просто закрывающая и открывающая.

Вообще самое правильное решение было письмом выше, а именно:

+ QUOTENAME (REPLACE(@hst,'''',''), '''') +

Здесь видно что кавычки просто раздвояются ;)
6 дек 05, 15:29    [2145517]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
garvy
Member

Откуда: Москва
Сообщений: 791
Да! С Quotename выдает правильный результат! Всем спасибо.
6 дек 05, 15:41    [2145580]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: использование одинарных кавычек  [new]
garvy
Member

Откуда: Москва
Сообщений: 791
Хочу освежить тему. Как мне в тексте хранимой процедуры написать следующее выражение:
@SQLREXTWHERE = ' SELECT CASE WHEN Поле3 = ''' F ''' THEN ''' текст ''' ELSE '''''' END FROM Таблица WHERE Поле1 Like '''A%''' AND Поле2 = '''B''' '

exec @SQL

Игра с тремя, четырьмя одинарными кавычками и QUOTENAME (REPLACE(F,'''',''), '''') ничего не дает. При 4 кавычках и Quotname проверка текста ошибки не выдает, зато выдает ошибку при исполнении, при трех кавычках - выдает ошибку при проверке текста.
24 июн 12, 12:29    [12766005]     Ответить | Цитировать Сообщить модератору
 Re: использование одинарных кавычек  [new]
Glory
Member

Откуда:
Сообщений: 104764
garvy
Игра с тремя, четырьмя одинарными кавычками и QUOTENAME (REPLACE(F,'''',''), '''') ничего не дает. При 4 кавычках и Quotname проверка текста ошибки не выдает, зато выдает ошибку при исполнении

потому что динамический запрос запускается так
exec(@SQL)

Стандартный редактор в SMS прекрасно показыает экранирование кавычек
@SQLREXTWHERE = ' SELECT CASE WHEN Поле3 = ''' F ''' THEN ''' текст ''' ELSE '''''' END FROM Таблица WHERE Поле1 Like '''A%''' AND Поле2 = '''B''' ' 

@SQLREXTWHERE = ' SELECT CASE WHEN Поле3 = '' F '' THEN '' текст '' ELSE '''' END FROM Таблица WHERE Поле1 Like ''A%'' AND Поле2 = ''B'' ' 
24 июн 12, 12:39    [12766028]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить