0

動的列を含むテーブルを作成する必要があったため、テーブルのレコードをループして必要な列を作成するカーソルを作成しましたが、次のエラーが発生します。

'INT'の近くの構文が正しくありません。

コード例:

SELECT @sql = 'ALTER TABLE #temp3 ADD ' + @nome + ' INT'
EXEC (@sql);

私もこれを試しました:

EXEC ('ALTER TABLE #temp3 ADD ' + @nome + ' INT')

しかし、それでも同じエラー

助言がありますか?

編集: @nomeを受け取ることができる値の例

  • ひどい
  • 悪い
  • 良い
  • とても良い
4

2 に答える 2

3

@nomeたとえば、VeryBadが含まれている可能性があることを示しました。その場合は、スペースが含まれています。スペースが名前の一部であることをSQL Serverが認識できるように、名前を区切る必要があります。

SELECT @sql = 'ALTER TABLE #temp3 ADD [' + @nome + '] INT'
EXEC (@sql);

またはより適切に、使用するQUOTENAME

SELECT @sql = 'ALTER TABLE #temp3 ADD ' + QUOTENAME(@nome) + ' INT'
EXEC (@sql);

それ以外の場合、SQL ServerはVery、データ型がで呼び出される列を追加しようとしますが、その後Badの解釈方法すらわかりません。int

于 2013-01-10T10:52:39.403 に答える
0

調査を勧めてくれた@Damienに感謝します。

if object_id(N'#tempg') is not null
    drop table #tempg

select 1 as i into #tempg

select * from #tempg

alter table #tempg add j int

exec sp_executesql N'alter table #tempg add k int'

select * from #tempg

ご了承ください

exec 'alter table #tempg add l int'

で失敗する

Msg 102, Niveau 15, État 1, Ligne 1
Syntaxe incorrecte vers 'alter table #tempg add l int'.

=============================================エディション

exec ('alter table #tempg add l int')

実行します

于 2013-01-10T10:52:56.453 に答える