Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1208856014
samalex
2008-04-22 13:20
2008.06.08
Установка символа разделения целой и дробной части числа


15-1208945641
Armond
2008-04-23 14:14
2008.06.08
Компоненты


15-1209054886
БарЛог
2008-04-24 20:34
2008.06.08
VBScript дописать файл


11-1190048966
Seaniapeape
2007-09-17 21:09
2008.06.08
Нужен совет


15-1209541192
ПЛОВ
2008-04-30 11:39
2008.06.08
Разборка с NumLock





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский