<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      用非動態SQL Server SQL語句來對動態查詢進行執行詳細說明

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

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

      以上就是用非動態SQL Server SQL語句來對動態查詢進行執行詳解的詳細內容,更多請關注php中文網其它相關文章!


      學習教程快速掌握從入門到精通的SQL知識。




      日韩精品一区二区三区高清