将变量(其值为select查询)传递给exists()函数在sql server中不起作用

时间:2016-09-26 06:55:20

标签: sql-server

我将动态生成的查询(存储在变量中)传递给exists()函数,但它无效。

SET @TABLE ='MYTABLE'
SET @QUERY='SELECT * FROM '+@TABLE

IF(EXISTS(@QUERY)) PRINT 'RECORD EXISTS'

我也试过这个

    --IF(EXISTS(EXEC(@QUERY))) PRINT 'RECORD EXISTS'

1 个答案:

答案 0 :(得分:1)

你不能将这样的变量传递给存在的函数。 您所能做的就是构建动态sql并检查之后是否为rowcount。

declare @table nvarchar(20)
declare @query nvarchar(200)

SET @TABLE = 'MYTABLE'
SET @QUERY = 'SELECT * FROM ' + @TABLE

EXECUTE sp_executesql @query

IF @@rowcount > 0 
    print 'record exists' 

此方法的问题是还将检索@query的结果集。

您可以尝试这样修复:

declare @table nvarchar(20)
declare @query nvarchar(200)

SET @TABLE = 'MYTABLE'
SET @QUERY = 'if exists (SELECT * FROM ' + @TABLE + ') print ''record exists''' 

EXECUTE sp_executesql @query

编辑:OP需要在无法调用过程的函数中执行此操作:
SQL Server不允许在函数中调用过程。 解决方法可以是在函数中添加一个整数变量(@tablenumber int)并像这样使用它:

if @tablenumber = 0
begin
    if exists(select * from table1) print 'record exists'
end
else if @tablenumber = 1
begin
    if exists(select * from table2) print 'record exists'
end
and so on

如果表的数量不大,这将有效。 (它仍然可以工作但需要的维护是不值得的)