を使用してsp_MSForeachtable
、すべてのテーブルの列名を取得し、列名を単一の文字列に連結しています。次のクエリを使用しています。単一のテーブルの変数を介してパラメーターを提供して同じことを実行しましたが、完全に機能しますが、SP から実行すると、「マルチパート識別子 "dbo.TableNm" をバインドできませんでした」というエラーで失敗します。
DECLARE @query nvarchar(max)
SELECT @query =
'DECLARE @Names VARCHAR(255)
DECLARE @DB VARCHAR(255)
SELECT @Names = COALESCE(@Names + '', '', '''') + COLUMN_NAME FROM Information_Schema.COLUMNS
WHERE TABLE_NAME = ?
SELECT TOP 1 @DB = TABLE_CATALOG FROM Information_Schema.COLUMNS
WHERE TABLE_NAME = ?
SELECT @DB AS [DataBase], ? AS [Table], @Names AS [Columns]'
EXEC sp_MSforeachtable @query
エラーは、異なるデータベースに同じ名前の複数のテーブルがあることに関連している可能性があると考えたため、データベースを事前に修正しようとしましたが、それでも同じエラーが発生します。
DECLARE @query nvarchar(max)
SELECT @query =
'DECLARE @Names VARCHAR(255)
DECLARE @DB VARCHAR(255)
DECLARE @TableNm VARCHAR(255) = ?
SET @DB = ''People_Directory''
SELECT @Names = COALESCE(@Names + '', '', '''') + COLUMN_NAME FROM Information_Schema.COLUMNS
WHERE TABLE_NAME = @TableNm
AND TABLE_CATALOG = @DB
SELECT @DB AS [DataBase], @TableNm AS [Table], @Names AS [Columns]'
EXEC sp_MSforeachtable @query
まだまだ頑張りますが、アイデアが尽きてしまいました。何かご意見は?