#t1などの一時テーブルの名前は、次を使用して決定できます。
select @TableName = [Name]
from tempdb.sys.tables
where [Object_ID] = object_id('tempDB.dbo.#t1')
テーブル値の変数の名前、つまり次のように宣言された変数の名前を見つけるにはどうすればよいですか?
declare @t2 as table (a int)
目的は、次のようなものを使用して、テーブルに関するメタ情報を取得できるようにすることです。
select @Headers = dbo.Concatenate('[' + c.[Name] + ']')
from sys.all_columns c
inner join sys.tables t
on c.object_id = t.object_id
where t.name = @TableName
ただし、一時テーブルの場合は、のtempdb.sys.tables
代わりに調べる必要がありsys.tables
ます。テーブル値の変数はどこで探しますか?
私は今、自分がやりたいこと、つまりテーブル値の変数をhtmlテーブルにフォーマットするためのジェネリック関数を書くことができないことに気づきました。手始めに、SQL Server 2005では、テーブル値のパラメーターを渡すことはできません。
http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters
さらに、SQL Server 2008では、パラメーターを厳密に入力する必要があるため、列の数と種類を常に把握できます。