2016-06-12 12 views
1

試みが近いこのT-SQLに近い変数ショー不適切な構文「@tablename」

declare @tableName VARCHAR(250) 

select @tableName='['+SCHEMA_NAME(schema_id)+'].['+name+']' 

FROM sys.tables 
WHERE '['+SCHEMA_NAME(schema_id)+'].['+name+']'='[Management].[Table_1]' 

print @tableName 

TRUNCATE table @tableName 

不適切な構文を実行するときには、エラーを示し「@tablename」。

答えて

4

これは間違いありません。変数を使用してテーブル名を渡すことはできません。

あなたは、動的SQLを使用することができます。

declare @sql nvarchar(max); 
set @sql = replace('TRUNCATE table @tableName', '@tableName', @tableName); 

exec sp_execute_sql @sql; 

SQL文がのパラメータを持つことが許可されているではなく、識別子のため、定数。これはSQL Serverの制限ではなく、すべての(?)データベースの制限です。この目的では、動的SQLがよく使用されます。

+0

ちょうどwhtが理由だと思っています! – user1254579

+1

@ user1254579 。 。これがSQLの定義方法です。 SQL Serverの場合、テーブル変数とテーブル名との間に競合があります。正に、変数がコンパイル時に設定されていれば、問題は見られませんが、データベースはこれをサポートしていません。 –

関連する問題