Переменная не работает при условии

Следующий код является частью хранимой процедуры. здесь я использую несколько переменных. логика этой программы состоит в том, что строка будет содержать значения, разделенные запятой (,), из которой нам нужно получить каждую строку, разделив входное значение. теперь выделенные строки будут использоваться в запросе для выполнения.

образец кода

@cond1--> строка ввода (например) ('' mark '', '' lewis '',)

@splt--> выделенные строки (т.е.)

Declare @pos INT, @len INT
set @pos = 0
set @len = 0
WHILE CHARINDEX(',', @cond1, @pos+1)>0
 BEGIN
 set @len = CHARINDEX(',', @cond1, @pos+1) - @pos;
 set @splt = SUBSTRING(@cond1, @pos, @len);
 if @pid = '' 
 Begin
 set @pid= @splt;
 End
 Else
 Begin
 set @pid= @pid + ' or positionid='+ @splt;
 End
 set @pos = CHARINDEX(',', @cond1, @pos+@len) +1;
 END
END
print 'SELECT day1,day1leg1,day1leg2,hccyamt,pfid,pcfcccy,pcfcbank,maturitydate,availeddate FROM rskpcfc WHERE 
 pcfcid='+@pcid;
SELECT day1,day1leg1,day1leg2,hccyamt,pfid,pcfcccy,pcfcbank,maturitydate,availeddate FROM rskpcfc WHERE 
 pcfcid=@pcid;

При выполнении вышеуказанного кода,

exec [dbo].[pcfc_select] @status='APCASSD',@cond1='''pc14-46-119'',''pc14-47-119'','

В заявлении для печати будет приведено следующее

SELECT day1,day1leg1,day1leg2,hccyamt,pfid,pcfcccy,pcfcbank,maturitydate,availeddate FROM rskpcfc WHERE 
 pcfcid='pc14-46-119' or pcfcid='pc14-47-119'

но оператор select возвращает пустую таблицу, даже если она имеет значения.

Все отлично работает, за исключением последней команды select

Я ценю вашу помощь!!!

1 ответ

Запрос, который выполняется в последней строке, следующий:

SELECT day1,day1leg1,day1leg2,hccyamt,pfid,pcfcccy,pcfcbank,maturitydate,availeddate 
FROM rskpcfc
WHERE pcfcid='''pc14-46-119'' or pcfcid=''pc14-47-119'''

а не тот, который вы видите при печати. Вы не можете динамически добавлять условия в предложение where с помощью замены параметров.

Для этого вы должны использовать динамическое выполнение sql с помощью процедуры sp_executesql или exec.

licensed under cc by-sa 3.0 with attribution.