私は大規模な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にSINGLE IDが含まれていると完全に動作しますが、複数のID(例:「14,15」)を送信しようとすると、エラーが発生します....
手掛かりはありますか?
シモンズ:私たちは、T-SQLの配列を持っていないので、もちろん、私は...
UPDATEを@ZIpCodeIDSのvarchar型を作った:私は直接クエリでハードコーディング場合:IN (14,11)
それは完璧に動作...ので何とかI私のコードから複数の値のためにこのパラメータを正しく送っていないと思います。 "、"区切り記号として表示されません。
UPDATE 2:リストを分割してIDをテーブルに入れようとしました。 zipCodeIDSにidが1つしかない場合、クエリは完全に機能します。複数の人のために、そうではありません...あなたは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