Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема в динамическом SQL  [new]
Vasiliy
Guest
Помогите решить проблему код такой
go
DECLARE @idObject Int, @dB_Date SMallDateTime, @dE_date SMallDateTime, @Discount float, @idMode Int, @strWhere nvarchar(1000), @idUser Int
SET @idObject=73
SET @dB_Date=cast(GETDAte() As smalldatetime)
SET @dE_Date=cast( GETDAte() As smalldatetime)
SET @Discount=10
SET @strWhere = ''
SET @idUser=4

DECLARE @strSQL varchar(2000)

SET @strSQL= ' INSERT INTO tmpWareDiscount (Object, Ware, Rest, B_date, E_date, Mode, Discount, [User]) SELECT '+CAST(@idObject As char(3))+', Ware, Rest, '
SET @strSQL =@strSQL + cast(@dB_Date As char(12))+ ' , ' + cast(@dE_Date As char(12))+', 0,'+cast(@Discount As varchar(3)) + ' FROM DBO.fnWareRestForDiscount(' +cast(@idObject As varchar(3))+')'

Exec ( @strSQL)


go

По-моему в @strSQL нужно как-то выделять даты, но как не знаю
Заранее признателен
27 янв 03, 20:57    [115789]     Ответить | Цитировать Сообщить модератору
 Re: Проблема в динамическом SQL  [new]
YuriAM
Member

Откуда:
Сообщений: 829
Возьми значение даты в кавычки, и если надо, то и преобразуй в тип DATE
с помощью функции CAST( var_ as datetime )
и все должно быть нормально !
Удачи!
28 янв 03, 08:38    [115860]     Ответить | Цитировать Сообщить модератору
 Re: Проблема в динамическом SQL  [new]
YuriAM
Member

Откуда:
Сообщений: 829
Да , не забудем, что в string-е одна кавычка представляеться двумя кавычками
:-)
28 янв 03, 08:40    [115861]     Ответить | Цитировать Сообщить модератору
 Re: Проблема в динамическом SQL  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
по-моему проблемма решается проще - отказаться от использования динамического запроса
28 янв 03, 09:38    [115892]     Ответить | Цитировать Сообщить модератору
 Re: Проблема в динамическом SQL  [new]
Белов Владимир
Member

Откуда: Москва
Сообщений: 1716
посмтори опцию
SET QUOTED_IDENTIFIER ON | OFF

А дату лучше преобразуй в convert(varchar,
и при это дата должна быть в кавычках при любом типе запроса.
28 янв 03, 10:00    [115917]     Ответить | Цитировать Сообщить модератору
 Re: Проблема в динамическом SQL  [new]
Vasiliy
Guest
Спасибо всем за ответы но что-то не получается
пишу
SET @strSQL=' INSERT INTO tmpWareDiscount ( Ware, Rest, B_date, E_date, Mode, Discount) SELECT Ware, Rest, Cast("'
SET @strSQL =@strSQL +rtrim(convert(varchar(12),@dB_Date,103))+ '" As Smalldatetime) As ff , cast("' + rtrim( convert(varchar(12),@dE_Date,103 ))+'" As smalldatetime) As GG, 0, '+cast(@Discount As varchar(3)) + ' FROM DBO.fnWareRestForDiscount(' +cast(@idObject As varchar(3))+')'
Print @strSQL

Exec ( @strSQL)

строка в Print @strSQL


INSERT INTO tmpWareDiscount ( Ware, Rest, B_date, E_date, Mode, Discount) SELECT Ware, Rest, Cast("27/01/2003" As Smalldatetime) As ff , cast("28/01/2003" As smalldatetime) As GG, 0, 10 FROM DBO.fnWareRestForDiscount(73)

копирую ее в другое окно Query Analizer дает такую же ошибку , заменяю кавычки двойные на одинарные все работает
Делаю внешние кавычки двойные внутренние одинарные не работает
Не пойму где собака порылась
28 янв 03, 13:29    [116182]     Ответить | Цитировать Сообщить модератору
 Re: Проблема в динамическом SQL  [new]
Белов Владимир
Member

Откуда: Москва
Сообщений: 1716
Твой запрос должен выглядеть следующим образом


SET @strSQL=' INSERT INTO tmpWareDiscount ( Ware, Rest, B_date, E_date, Mode, Discount) SELECT Ware, Rest, '''
SET @strSQL =@strSQL +convert(varchar,@dB_Date,103)+ ''' As ff , ''' + convert(varchar,@dE_Date,103 )+''' As GG, 0, '+cast(@Discount As varchar(3)) + ' FROM DBO.fnWareRestForDiscount(' +cast(@idObject As varchar(3))+')'
select @strSQL

28 янв 03, 13:38    [116190]     Ответить | Цитировать Сообщить модератору
 Re: Проблема в динамическом SQL  [new]
Vasiliy
Guest
Спасибо, все получилось.
28 янв 03, 13:41    [116193]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить