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

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

Susan Sarandon
發布: 2025-01-22 03:56:11
原創
293 人瀏覽過

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

避免動態 SQL:將逗號分隔值傳遞給 SQL Server 的 IN 子句

直接將逗號分隔的字串傳遞給 SQL Server 的 IN 函數通常會導致類型轉換錯誤。 例如:

DECLARE @Ids varchar(50);
SET @Ids = '1,2,3,5,4,6,7,98,234';

SELECT * FROM sometable
WHERE tableid IN (@Ids);
登入後複製

這將產生「轉換失敗」錯誤,因為 IN 子句需要單獨的整數值,而不是字串。

動態無 SQL 解決方案

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

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;
登入後複製

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

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板