は試練の間に昨日、私は)(あなたが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がありません)が修正されました。
次の質問はもちろんintの文字列への暗黙的な変換がない理由ですが、私はちょうどそれと一緒に暮らさなければならないと思います。 –
これは、あまりにもエラーが発生する可能性があるので、私はそれが許可されていないと思います(データが失われる可能性があります(nvarcharフィールドが短すぎる場合...)、C# –
INTからNVARCHARへの暗黙的な変換は、NVARCHARからINTへの暗黙的な変換として許可されています(図表:http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx)。 1つの数値に+演算子があり、もう一方にchar/nchar/varchar/nvarcharがあると、SQL Serverは暗黙的に数値型に変換してから数値を文字列に変換する代わりに加算を行い、 –