好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 用非動態SQL Server SQL語句來對動態查詢進行執行

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

熱門標簽:千呼電銷機器人價格 外呼系統電銷專用 京華物流公司地圖標注 怎樣在地圖上標注路線圖標 百度地圖標注不同路線 奧威地圖標注多個地方 優質地圖標注 武漢長沙外呼系統方法和技巧 智能語音外呼系統選哪家

此文章主要向大家講述的是非動態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語句執行動態查詢的描述,希望會給你帶來一些幫助在此方面。

您可能感興趣的文章:
  • PHP實現mysqli批量執行多條語句的方法示例
  • SQL SERVER 中構建執行動態SQL語句的方法
  • mybatis 插件: 打印 sql 及其執行時間實現方法
  • Mysql使用kill命令解決死鎖問題(殺死某條正在執行的sql語句)
  • Mysql 服務 1067 錯誤 的解決方法:修改mysql可執行文件路徑
  • MySql批量插入優化Sql執行效率實例詳解
  • oracle查看執行最慢與查詢次數最多的sql語句
  • SQL執行步驟的具體分析

標簽:銅仁 益陽 七臺河 威海 天水 宿州 來賓 防疫戰設

巨人網絡通訊聲明:本文標題《用非動態SQL Server SQL語句來對動態查詢進行執行》,本文關鍵詞  用非,動態,SQL,Server,語句,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《用非動態SQL Server SQL語句來對動態查詢進行執行》相關的同類信息!
  • 本頁收集關于用非動態SQL Server SQL語句來對動態查詢進行執行的相關信息資訊供網民參考!
  • 推薦文章