当一个表中没有数据时,需要在连接两个表时抛出异常

时间:2012-11-06 03:38:25

标签: sql-server-2008 sql-server-2008-r2

假设有两个表test1test2,我使用连接从两个表中选择值。

我的要求是:当我加入这两个表时,如果test1中有数据,但test2中没有找到相应的数据,那么查询应该抛出异常。

如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

您需要RAISEERROR

左边连接并选择右边为空的位置。如果计数> 0抛出异常。

DECLARE @count INT

SELECT 
   @count = COUNT(*)
FROM
  test1 t1
LEFT JOIN test2 t2 
  ON t1.t1_join_col = t2.t2_join_col
WHERE 
  t2.t2_join_col IS NULL -- find where we have test1 data but not test2 data

-- Check if I need to raise an error
IF @count <> 0 
    RAISERROR (N'<<%7.3s>>', -- Message text.
           10, -- Severity,
           1, -- State,
           N'abcde'); -- First argument supplies the string.
    -- The message text returned is: <<    abc>>.

如果您需要返回不匹配的结果,请添加以下ELSE

ELSE

SELECT 
  ... cols you want
FROM
  test1 t1
LEFT JOIN test2 t2 
  ON t1.t1_join_col = t2.t2_join_col

您可以随时将结果放入临时表并对其进行计数,然后如果您只想进行一次查询,则将其返回。