Форум: "Прочее";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.052 c