国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Sql Server - 用非動態(tài)SQL Server SQL語句來對動態(tài)查詢進(jìn)行執(zhí)行

用非動態(tài)SQL Server SQL語句來對動態(tài)查詢進(jìn)行執(zhí)行

2020-05-20 15:42MSSQL教程網(wǎng) Sql Server

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

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

是否存在一種不執(zhí)行動態(tài)SQL語句也能完成查詢的方式呢?

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

專家解答:

這里存在一種不執(zhí)行動態(tài)SQL ServerSQL語句也能完成查詢的方式,但是首先讓我們來探究這個問題。我將在以下例子中運(yùn)用AdventureWorks數(shù)據(jù)庫。

在你只有一個值的時候,執(zhí)行將不會有什么問題。

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

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

?
1
2
3
4
5
6
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列是一個整數(shù),因此會自動把@ManagerIDs轉(zhuǎn)換成變量。

為了解決這個問題,你可以運(yùn)用動態(tài)SQL執(zhí)行這個語句。這樣,你就能在執(zhí)行它之前動態(tài)地建立整個查詢。

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

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

那么你要如何在不使用動態(tài)SQL的情況下執(zhí)行查詢呢?可以通過XML實(shí)現(xiàn)。

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

?
1
2
3
4
5
6
7
8
9
10
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值,結(jié)果顯示如下:

?
1
Select @XmlStr

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

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

現(xiàn)在,你可以利用之前的查詢來限制結(jié)果:

?
1
2
3
4
5
6
SELECT *
FROM HumanResources.Employee
WHERE ManagerID IN(
SELECT x.ManagerID.value('.', 'INT') AS A
FROM @XmlStr.nodes('//ManagerID') x(ManagerID)
)

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

?
1
2
3
4
5
6
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

上述的相關(guān)內(nèi)容就是對非動態(tài)SQL ServerSQL語句執(zhí)行動態(tài)查詢的描述,希望會給你帶來一些幫助在此方面。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕一二三区 | 日韩免费 | 欧美激情精品久久久久久 | 国产日韩精品一区 | 国产精品国产三级国产aⅴ中文 | 精品久久亚洲 | av中文字幕在线 | 激情五月综合 | 国产黄免费 | 欧美三级网址 | 久久国产高清 | 亚洲精品免费在线 | 成年无码av片在线 | 一区视频 | 久久婷婷丁香 | 免费一二区 | 久久久中文字幕 | 国产成人91 | 欧美日韩国产影院 | 久久久精品网 | 国内自拍视频在线观看 | 都市激情在线视频 | 91免费视频观看 | 国产白浆在线观看 | 日韩在线一区二区三区 | 成人爽a毛片一区二区免费 久久久久亚洲精品 | 日本精品视频在线观看 | 久草久 | 一级黄色大片 | 中文日韩在线 | 伊人网站 | 国产精品久久久久久久午夜片 | 亚洲成人一区二区三区 | 免费午夜电影 | 欧美freesex交免费视频 | 在线99热| 亚洲三级在线 | 久久精品国产亚洲一区二区三区 | 中文av一区 | www日韩 | 午夜家庭影院 |