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 に答える