国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

用非動態SQL Server SQL語句來對動態查詢進行執行

2024-08-31 01:04:57
字體:
來源:轉載
供稿:網友

此文章主要向大家講述的是非動態SQL ServerSQL語句執行動態查詢,在實際操作中我嘗試在一個存儲過程中,來進行傳遞一系列以逗號劃定界限的值,來對結果集進行限制。但是無論什么時候,我在IN子句中使用變量,都會得到錯誤信息。

是否存在一種不執行動態SQL語句也能完成查詢的方式呢?

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

專家解答:

這里存在一種不執行動態SQL ServerSQL語句也能完成查詢的方式,但是首先讓我們來探究這個問題。我將在以下例子中運用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實現。

第一步,你需要從一個以逗劃定界限的字符串中產生一個XML字段。

Declare @ManagerIDs Varchar(100) Set @ManagerIDs = '3,6' DECLARE @XmlStr XML SET @XmlStr = --Start Tag '' + --Replace all commas with an ending tag and start a new tag REPLACE( @ManagerIDs, ',', '') + --End Tag '' 

接著,選擇這個XML值,結果顯示如下:

Select @XmlStr 

既然你有一個XML字段,我們就可以查詢它,結果按行顯示如下:

SELECT x.ManagerID.value('.', 'INT') AS A FROM @XmlStr.nodes('//ManagerID') x(ManagerID) 

現在,你可以利用之前的查詢來限制結果:

SELECT * FROM HumanResources.Employee WHERE ManagerID IN( SELECT x.ManagerID.value('.', 'INT') AS A FROM @XmlStr.nodes('//ManagerID') x(ManagerID) )

或者,你可以利用Inner Join來限制結果:

SELECT * FROM HumanResources.Employee AS A INNER JOIN (SELECT x.ManagerID.value('.', 'INT') AS ManagerID FROM @XmlStr.nodes('//ManagerID') x(ManagerID)) B ON A.ManagerID = B.ManagerID 

上述的相關內容就是對非動態SQL ServerSQL語句執行動態查詢的描述,希望會給你帶來一些幫助在此方面。


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌审旗| 连平县| 平安县| 兴安县| 静安区| 沭阳县| 柳江县| 墨竹工卡县| 都昌县| 泉州市| 比如县| 黑龙江省| 白朗县| 铁力市| 马鞍山市| 方山县| 白水县| 邯郸县| 绥芬河市| 波密县| 安新县| 余干县| 和田县| 松阳县| 政和县| 页游| 商河县| 岐山县| 三江| 三门峡市| 大洼县| 缙云县| 芜湖市| 乌兰浩特市| 丽江市| 马关县| 福鼎市| 千阳县| 普洱| 定边县| 兴海县|