为什么SQL Server要求将INT转换为NVARCHAR?

时间:2009-08-25 06:33:41

标签: sql-server tsql character-encoding

在昨天的考验中,我了解到你无法将此查询传递给EXEC():

@SQL = @SQL + 'WHERE ID = ' + @SomeID
EXCEC(@SQL)

其中@SomeID是INT,@ SQL是NVARCHAR。这会抱怨在执行期间无法将NVARCHAR转换回INT。

我意识到你必须这样做

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

我不明白为什么?为什么当简单地+:ed到NVARCHAR时,SQL Server不能理解INT?我猜它与char集有关。

编辑:修正了拼写错误(错过了一些+:s)。

2 个答案:

答案 0 :(得分:2)

+(String Concatenation)

  

字符串表达式中的运算符   连接两个或更多   字符或二进制字符串,列,   或字符串和列的组合   将一个表达式命名为一个表达式   操作者)。

     

Expression是任何有效的Microsoft®SQLServer™   表达任何数据类型   字符和二进制数据类型   类别,图像,ntext或   文本数据类型。这两个表达必须   具有相同的数据类型,或一个   表达必须能够   隐式转换为数据类型   另一个表达。

所以...没有隐式转换int到string ...这是一个内部问题

答案 1 :(得分:1)

我不是说这肯定会有效,而且我不会在我的sql管理工作室附近尝试发布之前,但是你试过这样的事情:

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