Sql server 将变量(其值为select query)传递给不在sql server中工作的exists()函数
我正在将动态生成的查询(存储在变量中)传递给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
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不允许从函数中调用过程。你对此无能为力,对不起,还有其他方法可以做到吗?没有,除非你可以使用不再那么动态的变通方法。见我的最新答案最后一个对我有帮助