如何检查SQL Server中的选择查询结果是否为NULL

时间:2014-08-15 09:00:12

标签: sql-server null

在SQL Server中,如何验证查询是否返回NULL并根据它运行块。例如在查询1中,我想检查if count(*) is not null,然后检查它是否有> 0。我应该在这里使用if exists吗?

if select count(*) from tbl1 not is NULL then 
   if select count(*) from tbl1 where count(*)>0 then
      raiserror()
   end if 
end if 

在Oracle中,可以说IF INSERTING THENIF updating THENif deleting then根据列运行某个代码块。我们如何在SQL Server中执行此操作?请参阅下面的Oracle代码。

CREATE OR REPLACE TRIGGER tr_name
    BEFORE DELETE OR INSERT OR UPDATE OF column1 ON tbl1
    FOR EACH ROW
    WHEN (NEW.column1 IS NOT NULL)
begin
IF INSERTING THEN
    run some code like check if there are more than row in a table and if >0 then not allow any    inserts 
IF updating THEN
    run some code 
IF deleting THEN
    run some code 
end

3 个答案:

答案 0 :(得分:2)

DECLARE @ErrorMsg nvarchar(400)
IF (SELECT count(*) FROM tbl1) = 0
BEGIN
    SET     @ErrorMsg = 'You are returning nothing'
    SELECT  @ErrorMsg Err
    RETURN 
END
Else IF (SELECT count(*) FROM tbl1) >= 1
BEGIN
    SET     @ErrorMsg = 'You are returning something'
    SELECT  @ErrorMsg Err
    RETURN 
END

你不能从计数中得到空,所以如果你检查0实际上是等价的。

else if检查计数返回的任何内容

你也可以使用IF EXISTS

IF EXISTS   (
        SELECT 1 FROM tbl1
)
BEGIN
    SET     @ErrorMsg = 'You are returning something'
    SELECT  @ErrorMsg Err
    RETURN 
END

答案 1 :(得分:0)

如果您正在编写触发器,通常不会检查pseduo表中是否存在任何内容,您只需根据伪表编写代码。另请注意,oracle触发器逐行执行,SQL Server触发器调用一次,psuedo表中可能有多个mutliple记录。

所以你在触发器中做了类似的事情:

INSERT INTO AnotherTable (Col1,Col2) SELECT Col1,Col3 FROM INSERTED

INSERTED是一个伪表。它包含插入(或更新)的所有记录。这里可能有0,1或许多记录。

如果记录为零,则此代码不会插入任何内容。

回到原来的问题,检查是否没有行的最佳方法是:

IF EXISTS (SELECT 1 FROM INSERTED)
BEGIN
-- Some Code
END

或者,在触发器中,您可以简单地指定触发器根本不会触发UPDATE或INSERT。

答案 2 :(得分:0)

select FOUND_ROWS();

将返回否。选择查询选择的记录。