避免動態 SQL:在 SQL Server 的 IN 子句中處理逗號分隔值
直接將逗號分隔的字串傳遞給 SQL Server 的 IN
函數通常會導致類型轉換錯誤。 讓我們來看一個常見的場景:
<code class="language-sql">DECLARE @Ids varchar(50); SET @Ids = '1,2,3,5,4,6,7,98,234'; SELECT * FROM sometable WHERE tableid IN (@Ids);</code>
這將導致轉換錯誤,因為 IN
子句需要單獨的整數值,而不是字串。 要在不使用動態 SQL 的情況下規避此問題,更可靠的方法是使用 CHARINDEX
函數:
<code class="language-sql">DECLARE @Ids varchar(50); SET @Ids = ',1,2,3,5,4,6,7,98,234,'; --Note the added commas SELECT * FROM sometable WHERE CHARINDEX(',' + CAST(tableid AS VARCHAR(8000)) + ',', @Ids) > 0;</code>
這個改進的查詢巧妙地在 @Ids
字串的兩端添加逗號。 CHARINDEX
然後在修改後的 tableid
字串中搜尋 @Ids
的逗號分隔版本。 這可確保精確匹配並防止部分匹配可能導致錯誤結果。 僅返回在逗號分隔清單中找到 tableid
的行。
以上是如何在沒有動態 SQL 的情況下將逗號分隔的字串傳遞給 SQL Server 的 IN 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!