我将动态生成的查询(存储在变量中)传递给exists()函数,但它无效。
SET @TABLE ='MYTABLE'
SET @QUERY='SELECT * FROM '+@TABLE
IF(EXISTS(@QUERY)) PRINT 'RECORD EXISTS'
我也试过这个
--IF(EXISTS(EXEC(@QUERY))) PRINT 'RECORD EXISTS'
答案 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
如果表的数量不大,这将有效。 (它仍然可以工作但需要的维护是不值得的)