在磨难昨天,我才知道,你无法通过这个查询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