首頁 >資料庫 >mysql教程 >如何在沒有動態 SQL 的情況下將逗號分隔的值傳遞給 SQL Server 的 IN 函數?

如何在沒有動態 SQL 的情況下將逗號分隔的值傳遞給 SQL Server 的 IN 函數?

Susan Sarandon
Susan Sarandon原創
2025-01-22 03:56:11232瀏覽

How to Pass Comma-Delimited Values to SQL Server's IN Function Without Dynamic SQL?

避免動態 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 解決方案

一個強大的替代方案,避免動態 SQL 的陷阱,涉及利用 CHARINDEX 函數:

<code class="language-sql">DECLARE @Ids varchar(50);
SET @Ids = ',1,2,3,5,4,6,7,98,234,'; -- Note the leading and trailing commas

SELECT * FROM sometable
WHERE CHARINDEX(',' + CAST(tableid AS VARCHAR(8000)) + ',', @Ids) > 0;</code>

透過在輸入字串 @Ids 和轉換 tableid 前後加上逗號,我們確保在逗號分隔的字串中正確識別每個單獨的值。 然後,CHARINDEX 函數有效地檢查修改後的 tableid 字串中是否存在每個 @Ids。 這有效地模仿了 IN 子句的行為,而不需要動態 SQL。

以上是如何在沒有動態 SQL 的情況下將逗號分隔的值傳遞給 SQL Server 的 IN 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn