在磨難昨天,我才知道,你無法通過這個查詢EXEC():爲什麼SQL Server要求將INT轉換爲NVARCHAR?
@SQL = @SQL + 'WHERE ID = ' + @SomeID
EXCEC(@SQL)
凡@SomeID是INT和@SQL是NVARCHAR。這會抱怨在執行期間無法將NVARCHAR轉換回INT。
我意識到你必須要做得像
@SQL = @SQL + 'WHERE ID = ' + CONVERT(NVARCHAR(20), @SomeID)
什麼我不明白是爲什麼呢?爲什麼SQL Server僅僅在+對NVARCHAR進行操作時才理解INT?我猜它與char集有關。
編輯:修正了錯別字(錯過了一些+:s)。
接下來的問題當然是爲什麼int沒有隱式轉換爲字符串,但我想我只需要忍受它。 – 2009-08-25 06:49:35
我想這是不允許的,因爲它太容易出錯(有可能會丟失數據(如果nvarchar字段太短...),同樣的方式,你不能將int轉換爲bool在C# – 2009-08-25 06:59:03
但是可以將INT隱式轉換爲NVARCHAR,因爲可以將NVARCHAR隱式轉換爲INT。請參閱http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx上的圖表。 ,當看到一個數字爲+的運算符,另一端使用char/nchar/varchar/nvarchar時,SQL Server將嘗試隱式轉換爲數字類型,然後執行一個添加,而不是將數字轉換爲字符串並進行協調。如果你想要另一個,你必須使用顯式轉換。 – 2009-08-25 17:09:48