程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 通過非動態SQL語句在SQL Server中執行動態查詢

通過非動態SQL語句在SQL Server中執行動態查詢

編輯:關於SqlServer

問題:

我嘗試在一個存儲過程中傳遞一系列以逗號劃定界限的值,以限制結果集。但是無論什麼時候,我在 IN子句中使用變量,都會得到錯誤信息。是否存在一種不執行動態SQL語句也能完成查詢的方式呢?

專家解答:

這裡存在一種不執行動態SQL語句也能完成查詢的方式,但是首先讓我們來探究這個問題。我將在以下 例子中運用AdventureWorks數據庫。

在你只有一個值的時候,執行將不會有什麼問題。

Declare @ManagerIDs Varchar(100)
Set @ManagerIDs = '3'
Select * from HumanResources.Employee
Where ManagerID IN (@ManagerIDs)

但是一旦你增加逗號,結果就會大致如下:

Declare @ManagerIDs Varchar(100)
Set @ManagerIDs = '3,6'
Select * from HumanResources.Employee
Where ManagerID IN (@ManagerIDs)
Msg 245, Level 16, State 1, Line 4
Conversion failed when converting the varchar value '3,6' to data type int.

這是因為SQL Sever分辨出ManagerID列是一個整數,因此會自動把@ManagerIDs轉換成變量。

為了解決這個問題,你可以運用動態SQL執行這個語句。這樣,你就能在執行它之前動態地建立整個查 詢。

Declare @ManagerIDs Varchar(100)
Set @ManagerIDs = '3,6'
Declare @SQL Varchar(1000)
Set @SQL =
'Select * from HumanResources.Employee
Where ManagerID IN (' + @ManagerIDs + ')'
EXEC (@SQL)

這樣能讓你執行這個查詢,但是動態SQL是個危險分子,在一些特定的組織中甚至不被允許使用。

那麼你要如何在不使用動態SQL的情況下執行查詢呢?可以通過XML實現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved