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

Откуда: Москва
Сообщений: 22
Пытаюсь выполнить следующую конструкцию:


declare @wdatebet as nvarchar(109),
@flkgj as nvarchar(1113)

SET @wdatebet = N'(wdate BETWEEN ''' + CAST(getdate() AS nvarchar(30)) + N''' AND ''' + CAST(getdate() AS nvarchar(30)) + N''')'
SET @flkgj='SELECT wdate FROM works WHERE '+ @wdatebet

print @flkgj

EXECUTE (@wdatebet)


в ответ плучаю:

SELECT wdate FROM works WHERE (wdate BETWEEN 'May 15 2003 5:37PM' AND 'May 15 2003 5:37PM')
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'wdate'.

Конструкция передаваемая в EXECUTE () как будтобы верная ( выполняется без проблем)

Может я чего не понимаю, но после 3х часов раскопок в BOL я так ничего не нашел :(

Подскажите плиз, в чем мой касяк
15 май 03, 17:40    [200157]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Слон
Member

Откуда:
Сообщений: 717
Попробуйте вместо EXECUTE (@wdatebet) выполнить EXECUTE (@flkgj). Все-таки собирается она, а EXECUTE (@wdatebet) будет выполнять не SELECT wdate FROM works WHERE (wdate BETWEEN 'May 15 2003 5:37PM' AND 'May 15 2003 5:37PM') , а "(wdate BETWEEN 'May 15 2003 5:37PM' AND 'May 15 2003 5:37PM')".

-- Слон
15 май 03, 17:48    [200169]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Luchkin Dmitry
Member

Откуда: Новосибирск -> Ангарск -> Братск -> Мск
Сообщений: 1921
я бы вместо nvarchar(30) написал просто nvarchar. может эта ошибка из-за лишних пробелов...
15 май 03, 17:49    [200171]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Luchkin Dmitry
Member

Откуда: Новосибирск -> Ангарск -> Братск -> Мск
Сообщений: 1921
2Слон

класс! вжисть бы не нашёл )
15 май 03, 17:50    [200173]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Drew
Member

Откуда: Москва
Сообщений: 22
Упс прошу прощения, это описка, выполнялся запрос именно такой


declare @wdatebet as nvarchar(109),
@flkgj as nvarchar(1113)

SET @wdatebet = N'(works.wdate BETWEEN ''' + CAST(getdate() AS nvarchar(30)) + N''' AND ''' + CAST(getdate() AS nvarchar(30)) + N''')'
SET @flkgj='SELECT * FROM works WHERE ' + @wdatebet

print @flkgj

EXEC (@flkgj)


пробовал вместо EXEC sp_executesql, тоже самое
15 май 03, 17:52    [200182]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Drew
Member

Откуда: Москва
Сообщений: 22
Упс прошу прощения, это описка, выполнялся запрос именно такой


declare @wdatebet as nvarchar(109),
@flkgj as nvarchar(1113)

SET @wdatebet = N'(works.wdate BETWEEN ''' + CAST(getdate() AS nvarchar(30)) + N''' AND ''' + CAST(getdate() AS nvarchar(30)) + N''')'
SET @flkgj='SELECT * FROM works WHERE ' + @wdatebet

print @flkgj

EXEC (@flkgj)


пробовал вместо EXEC sp_executesql, тоже самое
15 май 03, 17:52    [200183]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Crip
Member

Откуда:
Сообщений: 2490
Я делаю так:
вместо
CAST(getdate() AS nvarchar(30))
ставлю
replace(convert(varchar(23),getdate(),121),'-','')
15 май 03, 17:53    [200185]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Слон
Member

Откуда:
Сообщений: 717
Ну... Я попробовал с новым то вариантом - все должно работать как часы. По крайней мере у меня не ругалось.

-- Слон
15 май 03, 18:00    [200205]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Luchkin Dmitry
Member

Откуда: Новосибирск -> Ангарск -> Братск -> Мск
Сообщений: 1921
предлагаю внимательно перебить всю строку запроса. где-то незаметно закрались, может быть, лишние не правильные символы (напр. вместо "e" - "е" -- правда, похожи, но не одинаковые)...........
устал я....
15 май 03, 18:03    [200211]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Drew
Member

Откуда: Москва
Сообщений: 22
Хм, ту строку которая после PRINT вылезает я тупо копирую в другое окно в QA и все работает а так не хочет :(
15 май 03, 18:05    [200216]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Видимо, Вы привели всего лишь фрагмент всего скрипта (батча), что играете.
15 май 03, 18:07    [200220]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
MiCe
Member

Откуда: RUSSIA STAVROPOL Pyatigorsk
Сообщений: 1996
2 Crip
с ума сойти!....
declare @d datetime

set @d='2001-12-20T18:36:59.159'
select convert(varchar,@d,126)

помоему самый наилучший вариант для полной даты... ))
15 май 03, 18:11    [200227]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
cpp
Guest
Все просто - если в строке есть одинарные ковычки заключи ее в двойные. И я бы записал так:

declare @wdatebet as varchar(109),

@flkgj as nvarchar(1113)

SET @wdatebet = "(wdate BETWEEN '" + CAST(getdate() AS nvarchar(30)) + "' AND '" + CAST(getdate() AS nvarchar(30)) + "')"
SET @flkgj='SELECT wdate FROM works WHERE '+ @wdatebet

print @flkgj

EXECUTE (@wdatebet)
15 май 03, 18:13    [200233]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Crip
Member

Откуда:
Сообщений: 2490
2Mice
Да знаю про этот XML вариант. Почему-то по привычке пишу этот крокодил с replace... без этого Т как-то ближе и понятнееююю
15 май 03, 18:15    [200234]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Drew
Member

Откуда: Москва
Сообщений: 22
Хм, ту строку которая после PRINT вылезает я тупо копирую в другое окно в QA и все работает а так не хочет :(
15 май 03, 18:16    [200235]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и море глюков  [new]
Drew
Member

Откуда: Москва
Сообщений: 22
Похоже я нашел в чем был глюк, это проблема с длинной строкой окончание запроса просто не влазит в пределы nvarchar :)

просто чтобы не приводить всего хлама из которого состоит запрос я его подрезал и в это как раз и была скрыта проблема

Всем спасибо!
15 май 03, 18:22    [200249]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить