Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.08;
Скачать: CL | DM;

Вниз

MS SQL 2000   Найти похожие ветки 

 
sql   (2008-04-25 16:02) [0]

Почему процедуре нельзя ставить в параметр значение функции, т.е.:
IF UPDATE(BirthDate) EXEC [dbo].[spAddLog] "tEmployee", "BirthDate", @IdEmployee, CONVERT(nvarchar(12), @BirthDate, 102), CONVERT(nvarchar(12), @BirthDateOld, 102), "UPDATE", @UpDate, @UpUser
Выдает ошибку !

Rem:
CREATE PROCEDURE [dbo].[spAddLog] (@TableName nvarchar(32), @ColumnName nvarchar(32), @KodRow int, @NewValue nvarchar(255), @OldValue nvarchar(255), @Operation nvarchar(16), @UpDate datetime, @UpUser int)
AS
INSERT INTO tLog
                     (TableName, ColumnName, KodRow, NewValue, OldValue, Operation, [UpDate], UpUser)
VALUES     (@TableName, @ColumnName, @KodRow, @NewValue, @OldValue, @Operation, @UpDate, @UpUser)
GO


Если тередать значение функций переменными все работает без ошибок, т.е.:

SET @Birth = CONVERT(nvarchar(12), @BirthDate, 102)
SET @BirthOld = CONVERT(nvarchar(12), @BirthDateOld, 102)
IF UPDATE(BirthDate) EXEC [dbo].[spAddLog] "tEmployee", "BirthDate", @IdEmployee, @Birth, @BirthOld, "UPDATE", @UpDate, @UpUser


Как быть ? Если способ подставлять в параметр функцию ?

Зароанее спасибо !


 
Johnmen ©   (2008-04-25 16:07) [1]


> Выдает ошибку !

Нет такой ошибки.


 
Ega23 ©   (2008-04-25 16:09) [2]


> IF UPDATE(BirthDate)


ЧТО ЭТО???


 
wicked ©   (2008-04-25 16:13) [3]


> > IF UPDATE(BirthDate)
>
> ЧТО ЭТО???

так в триггерах пишут
и вообще, код, очевидно, из триггера


 
sql   (2008-04-25 16:15) [4]

Да, триггер, сорри сразу не пометил...
IF UPDATE(BirthDate)- Это проверка обновляется ли столбец или нет...


 
wicked ©   (2008-04-25 16:17) [5]


> Как быть ? Если способ подставлять в параметр функцию ?

имхо, не использовать идиоткие поблажки в TSQL синтаксисе

пробуй так
IF UPDATE(BirthDate)
 EXEC dbo.spAddLog("tEmployee", "BirthDate", @IdEmployee, CONVERT(nvarchar(12), @BirthDate, 102), CONVERT(nvarchar(12), @BirthDateOld, 102), "UPDATE", @UpDate, @UpUser);


ЗЫ за convert(..., ..., 102) я б тоже покусал


 
Bless ©   (2008-04-25 16:17) [6]

А кодом ошибки не поделишься?


 
Ega23 ©   (2008-04-25 16:22) [7]

а, триггер...
Не узнал сразу... :)


 
Bless ©   (2008-04-25 16:23) [8]

Попробовал у себя. Действительно не дает. Забавно.


 
sql   (2008-04-25 16:26) [9]


> wicked ©   (25.04.08 16:17) [5]

А кака сделать тогда, мне непосредственно сторока вида нужна такого: "01.01.2008" и еще такого "01.01.2008 16:00:00" если делать CAST- ом месяц превращается в прописной помоиму...


 
Ega23 ©   (2008-04-25 16:32) [10]

А потому, что параметры функции именовать надо.
IF UPDATE(BirthDate) EXEC [dbo].[spAddLog] @TableName="tEmployee", @ColumnName="BirthDate", @KodRow=@IdEmployee, @NewValue=CONVERT(nvarchar(12), @BirthDate, 102), @OldValue=CONVERT(nvarchar(12), @BirthDateOld, 102), @Operation="UPDATE", @UpDate=@UpDate, @UpUser=@UpUser


 
Ega23 ©   (2008-04-25 16:34) [11]

Кстати, а зачем тебе 102 в Convert? Тебе явно комбинация 104 и 108 нужна...


 
Bless ©   (2008-04-25 16:43) [12]


> Ega23 ©   (25.04.08 16:32) [10]
>
> А потому, что параметры функции именовать надо.


И что, работает?
У меня нет.


 
sql   (2008-04-25 17:05) [13]


> Bless ©   (25.04.08 16:43) [12]


У меня тоже кстати нет...


 
Ega23 ©   (2008-04-25 17:09) [14]


> И что, работает?
> У меня нет.


Да? Странно... Не, я не проверял, это предположение было...
Вечером посмотрю, может в BOL чё сказано...


 
Bless ©   (2008-04-25 17:15) [15]


> sql   (25.04.08 17:05) [13]


А зачем тебе именно функции. Ну присваивай предварительно переменным эти значения, большая проблема, что ли?

А вообще, я бы сделал иначе:
передавал бы в spAddLog дату как дату. А преобразование из даты в строку, раз уж ты так хочешь хранить дату в виде строки (зачем?), делал бы внутри самой процедуры.

Это лучше чисто идеологически.
Ведь у тебя не исключена ситуация, когда в двух разных местах эта процедура будет вызываться с неодинаковыми CONVERT-ами и в твоей таблице логов будут строки с датой, сохраненной в разных форматах.
Т.е. за одинаковостью должен следить ты.
А так следила бы сама процедура.


 
Bless ©   (2008-04-25 17:16) [16]

В догонку:
да и проблема твоя пропала бы сама собой :)


 
Ega23 ©   (2008-04-25 17:16) [17]


> А преобразование из даты в строку, раз уж ты так хочешь
> хранить дату в виде строки (зачем?), делал бы внутри самой
> процедуры.


Зачем? Прямо при селекте. А ещё проще - настроить Format отображения в DBGrid.


 
Bless ©   (2008-04-25 17:19) [18]


> Ega23 ©   (25.04.08 17:16) [17]
> Зачем? Прямо при селекте. А ещё проще - настроить Format
> отображения в DBGrid


Дык я тоже не понимаю, зачем в tLog у него все в varchar-ах, но вдруг позарез нужно, мало ли :)


 
Тимохов   (2008-04-25 22:16) [19]

а что напрягает?
так, видимо, легче оптимизатору.
я в свою время плотно копался с планами запросов - многие "нелогичности" становятся логичностями.



Страницы: 1 вся ветка

Текущий архив: 2008.06.08;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
2-1211030172
focor
2008-05-17 17:16
2008.06.08
ASCII коды символов


15-1209195745
SysError
2008-04-26 11:42
2008.06.08
Дерево кода Делфи


2-1210754361
Still Swamp
2008-05-14 12:39
2008.06.08
Как добавить элемент на TActionMainMenuBar?


2-1210741269
noviceman
2008-05-14 09:01
2008.06.08
Уничтожение объекта из "своего" события.


15-1209047607
Slider007
2008-04-24 18:33
2008.06.08
С днем рождения ! 24 апреля 2007 четверг