Sql server 将变量(其值为select query)传递给不在sql server中工作的exists()函数

Sql server 将变量(其值为select query)传递给不在sql server中工作的exists()函数,sql-server,Sql Server,我正在将动态生成的查询(存储在变量中)传递给exists()函数,但它不起作用 SET @TABLE ='MYTABLE' SET @QUERY='SELECT * FROM '+@TABLE IF(EXISTS(@QUERY)) PRINT 'RECORD EXISTS' 我也试过这个 --IF(EXISTS(EXEC(@QUERY))) PRINT 'RECORD EXISTS' 不能将这样的变量赋给exist函数。 您所能做的就是构建动态sql并检查之后的行数 declare

我正在将动态生成的查询(存储在变量中)传递给exists()函数,但它不起作用

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

IF(EXISTS(@QUERY)) PRINT 'RECORD EXISTS'
我也试过这个

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

不能将这样的变量赋给exist函数。 您所能做的就是构建动态sql并检查之后的行数

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

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

我在函数中使用此逻辑,但不允许在函数中调用过程(sp_executesql)。SQL Server不允许从函数中调用过程。你对此无能为力,对不起,还有其他方法可以做到吗?没有,除非你可以使用不再那么动态的变通方法。见我的最新答案最后一个对我有帮助