Вставка переменной, являющейся IS NULL

VitaliyV
Дата: 16.10.2003 15:21:30
Такой вопрос озадачил меня. В процедуре есть переменная @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 все работает)

Могет кто подскажет в чем дело и как это обойти.
buser
Дата: 16.10.2003 15:24:58
isnull(@ID_Type_Atr,'null')
Glory
Дата: 16.10.2003 15:26:04
вообще ничего не выводит на печать, а козалось бы должна
Не должна. Потому что по умолчанию конкатенация чего-нибудь с NULL дает в результате NULL.


exec('insert into Attribute Values ('+@maxAtr+',''' +ISNULL(@ID_Type_Atr, 'NULL')+''')') 
злой шаман
Дата: 16.10.2003 15:27:05
От динамического запроса избавьтесь и все будет нормально.
злой шаман
Дата: 16.10.2003 15:28:57
2 Glory & buser

А так вставится строка из четырех символов.
Zigs
Дата: 16.10.2003 15:29:00
null - это не строка, поэтому когда ты пытаешься сделать строка + null получается фигня и следовательно ошибка. чтобы вставить пустое значение сделай isnull(@id, '') тогда будет нормально. Если нужно вставить именно null, то определяй это заранее и двойные кавычки не ставь.
VitaliyV
Дата: 16.10.2003 15:30:42
Понял, СПАСИБО.
Сознаю свой позор........
Glory
Дата: 16.10.2003 15:32:00
Вот так правильнее
exec('insert into Attribute Values ('+@maxAtr+',' +ISNULL(''''+@ID_Type_Atr+'''', 'NULL')+')') 
VitaliyV
Дата: 16.10.2003 16:58:40
Уважаемый, 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')+')')
Может подскажите другой способ, решения задачи
Glory
Дата: 16.10.2003 17:08:17
Значит нужно сначала составить переменную содержащую запрос, а потом уже выполнить ее.