2009-08-25 11 views
1

は試練の間に昨日、私は)(あなたがEXECにこのクエリを渡すことができないことを学びました:SQL ServerでINTをNVARCHARに変換する必要があるのはなぜですか?

@SomeIDがINTで、@SQLがNVARCHARである
@SQL = @SQL + 'WHERE ID = ' + @SomeID 
EXCEC(@SQL) 

。これは、実行中にNVARCHARをINTに戻すことができないという不満があります。私はあなたが私は理解していなかった何

@SQL = @SQL + 'WHERE ID = ' + CONVERT(NVARCHAR(20), @SomeID) 

のようにそれをしなければならない実現

はなぜですか? NVARCHARに単純に+:edしたときにSQL ServerがINTを理解しないのはなぜですか?私はそれがchar setと関係があると推測しています。

編集:入力ミス(いくつかの+:sがありません)が修正されました。

答えて

2

+(文字列連結を)

二つ以上 文字またはバイナリ文字列、列、 または文字列と列の組み合わせを連結する文字列式 オペレータ1つの式(文字列 演算子)に名前を付けます。

発現は、画像、ntext型、または テキストデータ型を除いて、 文字やバイナリデータ型 カテゴリ内のデータ型のいずれかの任意の有効なのMicrosoft®SQL Server™の 式です。どちらの式も同じデータ型の でなければなりません。または の式は、他の式の の暗黙的に に変換できる必要があります。

だから... ...文字列にint型の暗黙convertionはありません...これは内部の問題

+0

次の質問はもちろんintの文字列への暗黙的な変換がない理由ですが、私はちょうどそれと一緒に暮らさなければならないと思います。 –

+1

これは、あまりにもエラーが発生する可能性があるので、私はそれが許可されていないと思います(データが失われる可能性があります(nvarcharフィールドが短すぎる場合...)、C# –

+1

INTからNVARCHARへの暗黙的な変換は、NVARCHARからINTへの暗黙的な変換として許可されています(図表:http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx)。 1つの数値に+演算子があり、もう一方にchar/nchar/varchar/nvarcharがあると、SQL Serverは暗黙的に数値型に変換してから数値を文字列に変換する代わりに加算を行い、 –

1

私はこれは間違いなく動作します、と私は投稿する前にそれを試して、私のSQL管理スタジオの近くにないんだけど、あなたはこのような何かしようとしているとは言わないよ:

@SQL = @SQL + 'Where ID = ' + @SomeID 
EXEC(@SQL) 
+0

Achのです!それはタイプミスです。私の悪い。 +私を嘲笑せずに見つけて修正するためのもの。 ;) –

関連する問題