2017-10-30 12 views
0

私は以下のSQL文を持っていますが、動作しません。エラーmsgは "キーワード 'AS'の近くに不正な構文があります。"私は '%'を削除すると、それは動作する必要がありますが、私はこのSQLで '%'を出力する必要があります、誰かがいくつかの提案を私に提供することができますか?なぜ私のsqlserverプロシージャは出力できません%

print @str 

が得られます:

declare @per varchar(10) = '0.00%' 
set @str = 'select ' + @per + ' AS ColumnA from #TempSui' ; 
exec (@str) 
+1

なぜここで動的SQLを使用していますか? –

答えて

2

あなたは何をexecしますか? UTEは次のとおりです。 select 0.00% AS ColumnA from #TempSui'は、あなたが引用符を追加する必要があります。

'select ' + QUOTENAME(@per, '''') + ' AS ColumnA from #TempSui' 
+1

これは、単純な連結とは異なり、 'QUOTENAME'が値内の単一引用符をエスケープすることに注意する価値があります。 –

2

は、私はあなただけあなたがダイナミックTSQLをデバッグするときPRINTを使用することは悪い考えではありません、引用符

declare @per varchar(10) = '0.00%' 
set @str = 'select ''' + @per + ''' AS ColumnA from #TempSui' ; 
exec (@str) 

を見逃すことだと思い

select '0.00%' AS ColumnA from #TempSui 
2

は、パラメータを使用することを学びます。あなたはこの問題を抱えていません。

declare @per varchar(10) = '0.00%' 
set @str = 'select @per AS ColumnA from #TempSui' ; 

exec sp_executesql @str, N'@per varchar(10)', @[email protected]; 

Voila!全く問題はありません。そして、あなたのコードはより安全で、より効率的かもしれません(実行するたびに再コンパイルする必要はありません)。

関連する問題