Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вставка переменной, являющейся IS NULL  [new]
VitaliyV
Guest
Такой вопрос озадачил меня. В процедуре есть переменная @ID_Type_Atr типа varchar. По ходу выполнения проц., ей присваивается значение NULL, вернее никакое значение.Так вот, как можно организовать выражение insert вставки строки , в которой одно из значений является IS NULL. Уменя примерно так exec ('insert into Attribute Values ('+@maxAtr+','''+@ID_Type_Atr+ ''')')
причем конструкция типа print 'test: '@ID_Type_Atr вообще ничего не выводит на печать, а козалось бы должна выводить test:
(когда @ID_Type_Atr отлична от NULL все работает)

Могет кто подскажет в чем дело и как это обойти.
16 окт 03, 15:21    [379532]     Ответить | Цитировать Сообщить модератору
 Re: Вставка переменной, являющейся IS NULL  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
isnull(@ID_Type_Atr,'null')
16 окт 03, 15:24    [379541]     Ответить | Цитировать Сообщить модератору
 Re: Вставка переменной, являющейся IS NULL  [new]
Glory
Member

Откуда:
Сообщений: 104760
вообще ничего не выводит на печать, а козалось бы должна
Не должна. Потому что по умолчанию конкатенация чего-нибудь с NULL дает в результате NULL.


exec('insert into Attribute Values ('+@maxAtr+',''' +ISNULL(@ID_Type_Atr, 'NULL')+''')') 
16 окт 03, 15:26    [379549]     Ответить | Цитировать Сообщить модератору
 Re: Вставка переменной, являющейся IS NULL  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
От динамического запроса избавьтесь и все будет нормально.
16 окт 03, 15:27    [379555]     Ответить | Цитировать Сообщить модератору
 Re: Вставка переменной, являющейся IS NULL  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
2 Glory & buser

А так вставится строка из четырех символов.
16 окт 03, 15:28    [379562]     Ответить | Цитировать Сообщить модератору
 Re: Вставка переменной, являющейся IS NULL  [new]
Zigs
Member

Откуда: Moscow
Сообщений: 69
null - это не строка, поэтому когда ты пытаешься сделать строка + null получается фигня и следовательно ошибка. чтобы вставить пустое значение сделай isnull(@id, '') тогда будет нормально. Если нужно вставить именно null, то определяй это заранее и двойные кавычки не ставь.
16 окт 03, 15:29    [379564]     Ответить | Цитировать Сообщить модератору
 Re: Вставка переменной, являющейся IS NULL  [new]
VitaliyV
Guest
Понял, СПАСИБО.
Сознаю свой позор........
16 окт 03, 15:30    [379570]     Ответить | Цитировать Сообщить модератору
 Re: Вставка переменной, являющейся IS NULL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Вот так правильнее
exec('insert into Attribute Values ('+@maxAtr+',' +ISNULL(''''+@ID_Type_Atr+'''', 'NULL')+')') 
16 окт 03, 15:32    [379574]     Ответить | Цитировать Сообщить модератору
 Re: Вставка переменной, являющейся IS NULL  [new]
VitaliyV
Guest
Уважаемый, Glory, Ваша конструкция
Вот так правильнее
exec('insert into Attribute Values ('+@maxAtr+',' +ISNULL(''''+@ID_Type_Atr+'''', 'NULL')+')')
не проходит. Поиски привели меня в FAQ, и вот, что там сказано:

Команда exec поддерживает в качестве аргумента конкатенацю строк и/или переменных. НО не поддерживатеся конкатенация результатов выполнения функций, т.е. конструкции вида
exec 'SELECT * FROM ' + LEFT(@TableName, 10)
запрещены к использованию.

Динамический запрос мне просто необходим, поскольку реально я использую входящий параметр в котором сидит имя базы, т.е.
exec('insert into '+@NameDB+'.dbo.Attribute Values ('+@maxAtr+',' +ISNULL(''''+@ID_Type_Atr+'''', 'NULL')+')')
Может подскажите другой способ, решения задачи
16 окт 03, 16:58    [379855]     Ответить | Цитировать Сообщить модератору
 Re: Вставка переменной, являющейся IS NULL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Значит нужно сначала составить переменную содержащую запрос, а потом уже выполнить ее.
16 окт 03, 17:08    [379885]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить