六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

用非動(dòng)態(tài)SQL Server SQL語(yǔ)句來(lái)對(duì)動(dòng)態(tài)查詢進(jìn)行執(zhí)行詳細(xì)說(shuō)明

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

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

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

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

專家解答:

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

在你只有一個(gè)值的時(shí)候,執(zhí)行將不會(huì)有什么問(wèn)題。

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

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

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.

這是因?yàn)镾QL Sever分辨出ManagerID列是一個(gè)整數(shù),因此會(huì)自動(dòng)把@ManagerIDs轉(zhuǎn)換成變量。

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

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í)行這個(gè)查詢,但是動(dòng)態(tài)SQL是個(gè)危險(xiǎn)分子,在一些特定的組織中甚至不被允許使用。

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

第一步,你需要從一個(gè)以逗劃定界限的字符串中產(chǎn)生一個(gè)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 
''

接著,選擇這個(gè)XML值,結(jié)果顯示如下:

Select @XmlStr

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

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

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

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

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

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)容就是對(duì)非動(dòng)態(tài)SQL ServerSQL語(yǔ)句執(zhí)行動(dòng)態(tài)查詢的描述,希望會(huì)給你帶來(lái)一些幫助在此方面。

以上就是用非動(dòng)態(tài)SQL Server SQL語(yǔ)句來(lái)對(duì)動(dòng)態(tài)查詢進(jìn)行執(zhí)行詳解的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。




主站蜘蛛池模板: 亚洲一区二区影视 | 五月天婷婷网址 | 色综合天天综合中文网 | 亚欧乱色精品免费观看 | 雪白丰满丝袜长腿白嫩在线 | 天堂国产在线观看 | 亚洲成人在线网站 | 亚洲精品乱码国产精品乱码 | 天天天天做夜夜夜夜做 | 午夜性伦鲁啊鲁免费视频 | 天天看天天射 | 天堂色网 | 日韩不卡毛片 | 日本在线不卡一区 | 天堂资源在线www中文 | 欧美一级片手机在线观看 | 中文字幕乱码一二三四区 | 午夜男人天堂 | 午夜电视剧| 天天插天天射天天干 | 亚洲国产高清在线 | 亚洲国产精品久久久久666 | 中文字幕欧美日韩在线不卡 | 日韩高清在线播放不卡 | 青草综合 | 最新版天堂中文在线官网 | 最新国产网站 | 天美传媒一区二区三区 | 速度与激情9免费完整版高清 | 在线久综合色手机在线播放 | 亚洲精品在线免费观看视频 | 日韩成人激情 | 欧美一区二区三区在线可观看 | 日韩成人精品 | 天天色网站 | 亚洲一区二区三区精品影院 | 天天射天天操天天色 | 一二三四免费观看高清动漫视频 | 最近免费的中文字幕一 | 亚洲爱婷婷色婷婷五月 | 污污小视频在线观看 |