У меня есть хранимая процедура, которая выглядит следующим образом:
ALTER PROCDURE [dbo].[zsp_selectallupceans_listProduction]
(@UPCList NVARCHAR(4000),
@EANList NVARCHAR(4000),
@Type TINYINT)
AS
SELECT
dd.UPC, dd.EAN, dd.EBAYID AS ItemID
FROM
ThirdPartyData AS dd
WHERE
EXISTS (SELECT 1 FROM dbo.SplitStringProduction(@UPCList,',') S1
WHERE dd.UPC = S1.val)
OR EXISTS (SELECT 1 FROM dbo.SplitStringProduction(@EANList,',') S2
WHERE dd.EAN = S2.val)
AND dd.Type = @Type
Параметры передаются следующим образом:
@UPCList='709127309019',
@EanList='0709127309019',
@Type=4
Функция «SplitStringProduction» выглядит следующим образом:
ALTER FUNCTION [dbo].[SplitStringProduction]
(@string NVARCHAR(MAX),
@delimiter NVARCHAR(5))
RETURNS @t TABLE
(
val NVARCHAR(500)
)
AS
BEGIN
DECLARE @xml XML
SET @xml = N'<root><r>' + replace(@string,@delimiter,'</r><r>') + '</r></root>'
INSERT INTO @t(val)
SELECT
r.value('.','varchar(500)') AS item
FROM
@xml.nodes('//root/r') as records(r)
RETURN
END
Теперь, когда я делаю простой выбор из моей таблицы, как показано ниже:
select *
from thirdpartydata dd
where dd.UPC = '709127309019' -- note this is one of the parameters passed to the stored procedure...
Я получу только 1 результат со столбцом Type
, установленным в "1" ....
Теперь, когда я опробую свою хранимую процедуру:
exec zsp_selectallupceans_listProduction '709127309019','0709127309019',4
Я по-прежнему получаю 1 результат, хотя я не должен получать никакого результата, потому что, если вы видите, что для параметра "Тип" установлено значение 4, то соответствующие записи не должны быть найдены ....
Что я здесь делаю не так, похоже, я не могу это понять ??