我有一個大的T-SQL查詢(我只在這裏放了一部分,因爲我非常肯定,其餘工作不錯):T-SQL奇怪的問題
WHERE /*
******* missing filter *******
this line should filter the risks by @LoggedInPersonID via role
******************************
AND */(@PropertyID IS NULL OR p.PropertyID = @PropertyID)
AND (@PCodePattern IS NULL OR p.PCode LIKE @PCodePattern)
AND (@ZipCodeIDS IS NULL
OR p.ZipCodeID IN (@ZipCodeIDS))
您會注意到@ZipCodeIDS是一個列表。 ..嗯,我用一些ID代碼填充這個。當@ZipCodeIDS包含一個單一的ID它完美的作品,但如果我嘗試發送多個ID(例如:「14,15」),它會給我錯誤....
你有任何線索嗎?
PS:當然,我做了@ZIpCodeIDS VARCHAR,因爲我們沒有數組中的T-SQL ...
更新:如果我直接在查詢硬編碼:IN (14,11)
它完美的作品...所以我莫名其妙不正確地從我的多個值,我認爲它不會看到代碼發送這個參數「」作爲分隔符...
更新2:試圖分裂名單,並把ID添加到一個表.. 。當zipCodeIDS只有一個id時,查詢完美。對於多個人,不是......你在ELSE上看到什麼奇怪的東西嗎?
IF @ZipCodeIDS IS NOT NULL
BEGIN
IF CHARINDEX(',', @ZipCodeIDS) = 0
BEGIN
insert @listofIDS values(@ZipCodeIDS)
END
ELSE
BEGIN
WHILE CHARINDEX(',', @ZipCodeIDS) != 0
BEGIN
insert @listofIDS values(Left(@ZipCodeIDS, PatIndex(',', @ZipCodeIDS) - 1))
SET @ZipCodeIDS = SUBSTRING(@ZipCodeIDS, CHARINDEX(',',@ZipCodeIDS)+1, LEN(@ZipCodeIDS) - CHARINDEX(',',@ZipCodeIDS))
END
END
END
您可以打印出查詢以查看它的實際外觀。 – NullUserException