欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL Server使用Merge語句當(dāng)源表數(shù)據(jù)集為空時,無法進(jìn)行查詢的問題

 更新時間:2009年07月22日 08:22:15   作者:  
今天使用Merge語句時遇到了一個問題,當(dāng)源表數(shù)據(jù)集為空時,merge就不工作了。

面舉一個例子來具體說明一下:
有兩個表SourceTable為登陸表,TargetTable為授權(quán)表,如果訪問用戶在登陸表中,更新授權(quán)表的授權(quán)級別,否則授權(quán)0表示游客。sql語句如下:

--SourceTable為登陸表,TargetTable為授權(quán)表
--如果訪問用戶在登陸表中,更新授權(quán)表的授權(quán)級別,否則授權(quán)0表示游客。
create table SourceTable(UserName nvarchar(10),Pwd int,[Level] int)
create table TargetTable(UserName nvarchar(10),[Level] int)
go
--下面是SQL Server2008新增的賦值功能,更多新功能請參見

insert into SourceTable values('user1','111',1),('user2','222',2),('user3','333',3)
insert into TargetTable values('user1',1),('user2',2)

一般情況,我們會寫如下的語句:

復(fù)制代碼 代碼如下:

declare @UserName varchar(10) = 'user2'--表示某個登陸的用戶名
merge into TargetTable as tg
using (select UserName,[Level] from SourceTable where UserName=@UserName)
as sr(UserName,[Level]) on tg.UserName=sr.UserName
when matched then
update set [Level]=sr.[Level]--更新授權(quán)級別
when not matched by target then
insert (UserName,[Level]) values(@UserName,0)--表示游客
output $action;


執(zhí)行結(jié)果為UPDATE,表示執(zhí)行了更新操作,也正是我們想要的。
但是如果我們把@UserName賦值為'user6',希望能在TargetTable中插入一條記錄,但是實際執(zhí)行結(jié)果為空,顯示什么都沒執(zhí)行。原因就是using (select UserName,[Level] from SourceTable where UserName=@UserName) as sr(UserName,[Level]) on tg.UserName=sr.UserName這個語句中,sr結(jié)果集為空,所以merge語句就不向后執(zhí)行了,不知道這是不是SQL Server的bug。

下面的SQL可以解決上面的問題:

復(fù)制代碼 代碼如下:

declare @UserName varchar(10) = 'user7'--表示某個登陸的用戶名
merge into TargetTable as tg
using (select @UserName)
as sr(UserName) on tg.UserName=sr.UserName
when matched then
update set [Level]= (select top 1 [Level] from SourceTable where UserName=@UserName)
--更新授權(quán)級別
when not matched by target then
insert (UserName,[Level]) values(@UserName,0)--表示游客
output $action;

相關(guān)文章

  • 刪除Table表中的重復(fù)行的方法

    刪除Table表中的重復(fù)行的方法

    在寫SQL的時候經(jīng)常會有這樣的需求: 在一個Table中會有多條重復(fù)的數(shù)據(jù),如何有效的取出來不重復(fù)的數(shù)據(jù),或者是刪除掉重復(fù)的數(shù)據(jù),或者取出某列重復(fù)值的第一條數(shù)據(jù).
    2010-06-06
  • SQL SERVER先判斷視圖是否存在然后再創(chuàng)建視圖的語句

    SQL SERVER先判斷視圖是否存在然后再創(chuàng)建視圖的語句

    SQL SERVER中先判斷視圖是否存在,使用IF NOT EXISTS,然后再創(chuàng)建視圖,使用create view,整個過程如下
    2014-08-08
  • SQL?SERVER常用的日期與時間查詢總結(jié)

    SQL?SERVER常用的日期與時間查詢總結(jié)

    這篇文章介紹了SQL?SERVER常用日期與時間查詢的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • sqlServer實現(xiàn)分頁查詢的三種方式

    sqlServer實現(xiàn)分頁查詢的三種方式

    在SqlServer中分頁查詢是經(jīng)常用到的查詢語句,一個好的分頁查詢語句,不能將代碼省略,下面這篇文章主要給大家介紹了關(guān)于sqlServer實現(xiàn)分頁查詢的三種方式,需要的朋友可以參考下
    2023-03-03
  • sql2000掛起無法安裝的問題的解決方法

    sql2000掛起無法安裝的問題的解決方法

    關(guān)于:以前的某個程序安裝已在安裝計算機(jī)上創(chuàng)建掛起的文件操作 解決辦法
    2008-11-11
  • sql條件查詢語句的簡單實例

    sql條件查詢語句的簡單實例

    這篇文章介紹了sql條件查詢語句的簡單實例,有需要的朋友可以參考一下
    2013-10-10
  • 文本、Excel、Access數(shù)據(jù)導(dǎo)入SQL Server2000的方法

    文本、Excel、Access數(shù)據(jù)導(dǎo)入SQL Server2000的方法

    昨天參加一個項目的維護(hù),因為各種原因,數(shù)據(jù)在不同服務(wù)器上不一致,所以需要重新將數(shù)據(jù)庫清空一次,并將整理后的數(shù)據(jù)重新導(dǎo)入。需導(dǎo)入的數(shù)據(jù)源為文本文件,記錄以行存儲,“,”逗號分割各字段,每個字段值用“”雙引號封閉。
    2008-10-10
  • SQL Server中row_number函數(shù)的常見用法示例詳解

    SQL Server中row_number函數(shù)的常見用法示例詳解

    這篇文章主要給大家介紹了關(guān)于SQL Server中row_number函數(shù)的常見用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SQL Server 2005作業(yè)設(shè)置定時任務(wù)

    SQL Server 2005作業(yè)設(shè)置定時任務(wù)

    這篇文章主要介紹了SQL Server 2005作業(yè)設(shè)置定時任務(wù)的相關(guān)詳細(xì)步驟,需要的朋友可以參考下
    2017-01-01
  • 公網(wǎng)遠(yuǎn)程訪問局域網(wǎng)SQL Server數(shù)據(jù)庫

    公網(wǎng)遠(yuǎn)程訪問局域網(wǎng)SQL Server數(shù)據(jù)庫

    數(shù)據(jù)庫的重要性相信大家都有所了解,在某些場景下,數(shù)據(jù)庫已經(jīng)成為企業(yè)正常運行必不可少的條件之一。與企業(yè)的其他工作一樣,數(shù)據(jù)庫也需要進(jìn)行必要的維護(hù),想詳細(xì)了解的同學(xué)可以參考這篇文章
    2023-04-04

最新評論