0

我正在编写一个存储过程,旨在针对许多类似的表运行。由于我们每年都归档数据库,因此它不仅需要表名参数,还需要数据库名参数。

问题是,我想检查表是否存在,但我事先不知道数据库名称。通常我可以这样做:

IF  EXISTS (
SELECT * 
FROM [Database].sys.objects 
WHERE object_id = OBJECT_ID(@TableName)
 AND type in (N'U'))

但是将 DB 名称作为变量传递给它意味着我很确定 sys.objects 会对我产生影响。

这可能吗?

4

1 回答 1

1

你需要动态sql。注意每个新语句之前的空格,就像换行一样

declare @db varchar(50) = 'mydbname'
declare @TableName varchar(50) = 'mytablename'
declare @sql varchar(max)

set @sql = 'use '+@db

set @sql = @sql + ' IF  EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID('''+@TableName+''') AND type in (''U''))  
begin 
     select 1 
end'

exec (@sql)
于 2012-12-17T01:44:21.853 回答