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

首頁 > 數據庫 > Oracle > 正文

在T-SQL中實現Oracle的MINUS集合運算符

2024-08-29 13:36:12
字體:
來源:轉載
供稿:網友
  SQL語言中的MINUS(減法)集合運算符是非常重要的。找到兩個給定的數值集合之間的差異,意味著找到一個數值集合,其中的元素僅存在于前一個集合中,而不存在于另一個集合中,這項操作是一個很常見,也非常重要的操作,非凡是在處理數據庫圖表發生結構性的變化的時候。 這項操作在以下情況中非常有用:當你想標識哪些列被添加或者刪除時,或者當你改變了表中的初始值,并想了解兩個圖表中的數據差別時。例如,在測試和產品環境中。  這個運算符存在于Oracle SQL中,但是很不幸運的是,它不存在于SQL Server 2000 SQL中。這里我描述一下使用T-SQL工具實現功能稍弱一點的MINUS運算符的方法。  我編寫了一個名為sp_Minus的程序,這個程序執行兩個查詢,并找出他們之間的差別。當結果集中只出現了一個列時,會出現意外情況,它實際上使得這個程序成為一個MINUS向量操作,而不是一個集合操作。這是因為我使用了NOT IN運算符,它只作用于一個列,而不是一些列的集合。這個程序在兩個select(選擇)語句中安置了一個INTO子句,并構建了兩個全局臨時表來存儲中間結果。然后使用一個NOT IN子句在這兩個表上執行MINUS運算符動作,最終生成一個MINUS向量結果。下面是程序代碼:
CREATE PRocedure sp_MINUS (@query1 varchar(2000),
@query2 varchar(2000))
As
BeginDeclare @buildStmt1 varchar(2000)
Declare @buildStmt2 varchar(2000)
Declare @pos1 int
Declare @pos2 int Set nocount on
Set @pos1 = charindex ('FROM',upper (@query1))
Set @pos2 = charindex ('FROM',upper (@query2))-- 在語句中輸入into 子句Set @buildStmt1 = SUBSTRING (@query1,1,@pos1-1) +
' as f into ##t1 ' +
SUBSTRING (@query1,@pos1,len(@query1) - @pos1 + 1)Set @buildStmt2 = SUBSTRING (@query2,1,@pos2-1) +
' as f into ##t2 ' +
SUBSTRING (@query2,@pos2,len(@query2) - @pos2 + 1)-- 構建中間全局臨時表EXEC (@buildStmt1)
EXEC (@buildStmt2)
-- 執行MINUS操作Select f from ##t1
Where f NOT in (select f from ##t2)-- 刪除表Drop table ##t1
Drop table ##t2
Set nocount off
End Go應用實例:EXEC @p=sp_minus 'select categoryid from categories',
'select categoryid,prodUCtid from products where productid < 12'

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景德镇市| 桂平市| 荔浦县| 新昌县| 宜阳县| 泽普县| 南汇区| 克山县| 成安县| 建湖县| 鄂托克旗| 博乐市| 红安县| 扶沟县| 仙居县| 墨玉县| 海安县| 关岭| 汝阳县| 太仆寺旗| 恩施市| 浪卡子县| 客服| 休宁县| 余姚市| 新巴尔虎左旗| 广南县| 乌拉特后旗| 华亭县| 尚志市| 清苑县| 南宫市| 桂东县| 德州市| 抚松县| 贵南县| 盐源县| 沁水县| 积石山| 综艺| 黎川县|