直接將逗號分隔的字串傳遞給 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中文網其他相關文章!