Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 OR оператор в IF логике  [new]
NewBie77
Member

Откуда:
Сообщений: 184
Доброго времени суток. Пытаюсь написать скрипт где в логике , если один из col_list-ов пустой или NULL присвоить rc = 1 если иначе то присвоить rc = 0 и выпольнить логику. Скрипт пишу следующим образом :

declare @col1_list varchar(max) , @col2_list varchar(max)
declare @tbl TABLE (col1 int , col2 int)
declare @rc char(1) = '0'
set @col1_list = '2|6|7|8|'
set @col2_list = NULL --'1|'

IF ((@col1_list IS NOT NULL AND @col1_list <> '') OR (@col2_list IS NOT NULL AND @col2_list <> ''))
BEGIN
	DECLARE @myXML1 AS XML = N'<H><r>' + REPLACE(@col1_list, '|', '</r><r>') + '</r></H>'
	DECLARE @myXML2 AS XML = N'<H><r>' + REPLACE(@col2_list, '|', '</r><r>') + '</r></H>';
	
	with mycte as (SELECT Vals1.id.value('.', 'NVARCHAR(50)') AS val1
	FROM @myXML1.nodes('/H/r') AS Vals1(id)),
	mycte1 as (SELECT Vals2.id.value('.', 'NVARCHAR(50)') AS val2
	FROM @myXML2.nodes('/H/r') AS Vals2(id))
	
	insert into @tbl (col1,col2)
	select val1,val2
	from mycte,mycte1
	where val1 <> '' and val2 <> ''
	set @rc = '0'
END	
	ELSE
		set @rc ='1'

	select @rc as [rc]


Что я делаю неправильно ? У меня в данном случае rc = 0 , а должно быть 1 т.к @col2_list = NULL
13 апр 14, 20:18    [15875786]     Ответить | Цитировать Сообщить модератору
 Re: OR оператор в IF логике  [new]
Glory
Member

Откуда:
Сообщений: 104751
NewBie77
Что я делаю неправильно ?

Ну так выражение @col1_list IS NOT NULL AND @col1_list <> '' есть истина.
А истина ИЛИ что-то еще и будет истина
13 апр 14, 20:27    [15875812]     Ответить | Цитировать Сообщить модератору
 Re: OR оператор в IF логике  [new]
NewBie77
Member

Откуда:
Сообщений: 184
Glory,

Вы правы , а как написать правильно логику ?
13 апр 14, 20:32    [15875830]     Ответить | Цитировать Сообщить модератору
 Re: OR оператор в IF логике  [new]
NewBie77
Member

Откуда:
Сообщений: 184
Кому интересно написал следующим образом :

declare @col1_list varchar(max) , @col2_list varchar(max)
declare @tbl TABLE (col1 int , col2 int)
declare @rc char(1)= '0'
set @col1_list = '2|6|7|8|'
set @col2_list = '1|'

IF (NULLIF(@col1_list,'') IS NOT NULL AND NULLIF(@col2_list,'') IS NOT NULL)
BEGIN
	DECLARE @myXML1 AS XML = N'<H><r>' + REPLACE(@col1_list, '|', '</r><r>') + '</r></H>'
	DECLARE @myXML2 AS XML = N'<H><r>' + REPLACE(@col2_list, '|', '</r><r>') + '</r></H>';
	
	with mycte as (SELECT Vals1.id.value('.', 'NVARCHAR(50)') AS val1
	FROM @myXML1.nodes('/H/r') AS Vals1(id)),
	mycte1 as (SELECT Vals2.id.value('.', 'NVARCHAR(50)') AS val2
	FROM @myXML2.nodes('/H/r') AS Vals2(id))
	
	insert into @tbl (col1,col2)
	select val1,val2
	from mycte,mycte1
	where val1 <> '' and val2 <> ''
	set @rc = '0'
END	
	else	
		set @rc = '1'
		-- some logic

select @rc [rc]
13 апр 14, 22:00    [15876168]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить