Vig*_*h M 1 t-sql dynamic-sql sql-server-2012
我需要检查来自不同数据库的表的存在.我知道如何静态地执行此操作.但我想动态传递表名和数据库名.
所以这是期望,
Declare @tablename varchar(100) = 'testtable', @dbName Varchar(100) = 'TestDB',@isexist varchar(100)
If exists (select 1 from @dbName..sysobjects where name = @tablename)
Set @isexists = 'Table Exists'
Else set @isexists = 'Table do not exist'
Run Code Online (Sandbox Code Playgroud)
尝试动态查询:
Declare @tablename varchar(100) = 'testtable', @dbName Varchar(100) = 'TestDB'
DECLARE @statement NVARCHAR(MAX) = 'If exists (select * from ' + @dbName + '..sysobjects where name = ''' + @tablename + ''')'
+ 'Print ''Table Exists''' +
'Else Print ''Table do not exist'''
EXEC(@statement)
Run Code Online (Sandbox Code Playgroud)
如果您需要从动态查询返回一些值,那么您可以使用sp_executesql一些输出参数,如:
Declare @tablename varchar(100) = 'testtable', @dbName Varchar(100) = 'TestDB', @b bit
DECLARE @ParamDefs NVARCHAR(MAX) = '@b BIT OUTPUT'
DECLARE @statement NVARCHAR(MAX) = 'If exists (select * from ' + @dbName + '..sysobjects where name = ''' + @tablename + ''')'
+ 'Set @b = 1' +
' Else Set @b = 0'
EXEC sp_executesql @statement, @ParamDefs, @b OUTPUT
SELECT @b
Run Code Online (Sandbox Code Playgroud)