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

Откуда: Калининград
Сообщений: 78
Доброе время суток!
Помощи прошу. Вроде как уже много лет играюсь с SQL, а так и не постиг эту безумную идею с правильной расстановкой кавычек, для формирования динамических запросов:

DECLARE @varDT1 datetime, @varDT2 datetime
DECLARE @txt varchar(100)

SET @varDT1= '01-01-2015'
SET @varDT2= '01-31-2015'

SET @txt= 'exec movelist ''+@varDT1+ '', ''+@varDT2''
print @txt

SET @txt = 'select * FROM openquery("линк_сервер",''' + @txt + ''' )'
PRINT @txt

помогите расставить их так, что бы в итоге получились ТАКИЕ строки:

exec movelist '01-01-2015', '01-31-2015'
select * FROM openquery("линк_сервер", 'exec movelist ''01-01-2015'', ''01-31-2015''')
4 фев 15, 16:19    [17218210]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
WertAndrey,

формируйте строковую дату в виде '20150131'.
А то прямо-таки глаз режет!
4 фев 15, 16:33    [17218327]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
 SET @txt= 'exec movelist '''+@varDT1+ ''', '''+@varDT2+''''
4 фев 15, 16:34    [17218334]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Maxx
 SET @txt= 'exec movelist '''+@varDT1+ ''', '''+@varDT2+''''

+совет iap
 SET @txt= 'exec movelist "'+@varDT1+ '", "'+@varDT2+'"'
 print @txt

 SET @txt = 'select * FROM openquery("линк_сервер",''' + @txt + ''')' 
PRINT @txt
4 фев 15, 16:35    [17218346]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Maxx,

хотя помоему не прокатит с двойными кавычками :( Не будет работать.. всмысле во время исполнения...
ТС отзовитесь
4 фев 15, 16:37    [17218360]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
WertAndrey
Member

Откуда: Калининград
Сообщений: 78
Maxx,

вторая строка получается:
select * FROM openquery("линк_сервер",'exec kgd_movelist '01-01-2015','01-31-2015'' )

немного не так.. ((
4 фев 15, 16:39    [17218372]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
WertAndrey
Member

Откуда: Калининград
Сообщений: 78
Maxx,

двойные кавычки там не работают.. ((
4 фев 15, 16:40    [17218379]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
WertAndrey
Member

Откуда: Калининград
Сообщений: 78
Maxx
Maxx
 SET @txt= 'exec movelist '''+@varDT1+ ''', '''+@varDT2+''''

+совет iap
 SET @txt= 'exec movelist "'+@varDT1+ '", "'+@varDT2+'"'
 print @txt

 SET @txt = 'select * FROM openquery("линк_сервер",''' + @txt + ''')' 
PRINT @txt



СПАСИБО!! как ни странно, но ЭТО сработало!! СПАСИБО!
4 фев 15, 16:44    [17218408]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
WertAndrey
Maxx,

двойные кавычки там не работают.. ((


 SET @txt= 'exec movelist '''''+@varDT1+ ''''', '''''+@varDT2+''''''
 print @txt

 SET @txt = 'select * FROM openquery("линк_сервер",''' + @txt + ''')' 
PRINT @txt

---------------------------------------------------------------
exec movelist ''01-01-2015'', ''01-31-2015''
select * FROM openquery("????_??????",'exec movelist ''01-01-2015'', ''01-31-2015''')

?
4 фев 15, 16:46    [17218423]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4260
WertAndrey
Доброе время суток!
Помощи прошу. Вроде как уже много лет играюсь с SQL, а так и не постиг эту безумную идею с правильной расстановкой кавычек, для формирования динамических запросов:

Если трудно ориентироваться с двойными-тройными-четверными кавычками, то используйте
CHAR(34) и CHAR(39)
4 фев 15, 16:52    [17218456]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
WertAndrey
Member

Откуда: Калининград
Сообщений: 78
тогда сразу второй вопрос:
как мне эту последнюю строчку подставить в вызов курсора, типа:

DECLARE cur CURSOR FOR EXEC (@txt)

возможно ли такое?
4 фев 15, 17:09    [17218574]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
WertAndrey
DECLARE cur CURSOR FOR EXEC (@txt)


А где такой тип курсора то есть ?
4 фев 15, 17:12    [17218606]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а вообще ето строка ..пишите че хотите :) Бумага все стерпит
4 фев 15, 17:13    [17218619]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
х_з
Guest
если у Вас проблема с пониманием динамики и ковычек, Вы уверенны что курсору самое место в вашей задачи??
4 фев 15, 17:15    [17218641]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
WertAndrey
Member

Откуда: Калининград
Сообщений: 78
Maxx
WertAndrey
DECLARE cur CURSOR FOR EXEC (@txt)


А где такой тип курсора то есть ?


DECLARE cur CURSOR FOR
select * FROM openquery("линк_сервер", 'exec movelist ''01-25-2015'', ''01-25-2015''')

это работает!!!!

я хочу "запихать" это в процедуру и дату передавать параметром...
учитывая что openquery не принимает подстановочный аргумент, приходится формировать строку..

каким образом теперь скормить такую строку курсору?
4 фев 15, 17:17    [17218664]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
WertAndrey
это работает!!!!

еще громче
Курсор вам накой в такой конструкции то ?
4 фев 15, 17:19    [17218682]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
WertAndrey
Member

Откуда: Калининград
Сообщений: 78
ВСЕМ СПАСИБО!
вопрос решился!!!!
4 фев 15, 17:21    [17218697]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
похоже вас вообще сюда
EXECUTE
автор
AT linked_server_name






Applies to: SQL Server 2008 through SQL Server 2014.


Specifies that command_string is executed against linked_server_name and results, if any, are returned to the client. linked_server_name must refer to an existing linked server definition in the local server. Linked servers are defined by using sp_addlinkedserver.
4 фев 15, 17:24    [17218725]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
WertAndrey
Member

Откуда: Калининград
Сообщений: 78
Maxx
WertAndrey
это работает!!!!

еще громче
Курсор вам накой в такой конструкции то ?


таковы реалии БД в головной конторе..... не надо меня спрашивать.... (((
было перепробовано много вариантов,
считывать данные ч-з курсор оказалось самым оптимальным вариантом.
4 фев 15, 17:26    [17218737]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
o-o
Guest
Maxx,
да он хотел динамический запрос выполнить: EXEC (@txt),
а по возвращенному резалтсету пройтись курсором.
ну очень трудно сформулировать :)
4 фев 15, 17:29    [17218752]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
o-o
Maxx,
да он хотел динамический запрос выполнить: EXEC (@txt),
а по возвращенному резалтсету пройтись курсором.
ну очень трудно сформулировать :)

ну так я и спрашиваю- накой такой гимор то ????
WertAndrey
считывать данные ч-з курсор оказалось самым оптимальным вариантом.

чет я ну очнеь сильно сомневаюсь..но дело то ваше
4 фев 15, 17:31    [17218761]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
o-o
Guest
Maxx,

ну мало ли, хочет запускать много раз на этом сервере процедуру с параметрами,
к-ые как раз лежат в возвращаемом резалтсете с того сервера
4 фев 15, 17:36    [17218774]     Ответить | Цитировать Сообщить модератору
 Re: беда с кавычками  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
o-o,

лано:)) дело то ТСа по факту
4 фев 15, 17:42    [17218797]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить