在昨天的考验中,我了解到你无法将此查询传递给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)。
答案 0 :(得分:2)
+(String Concatenation)
字符串表达式中的运算符 连接两个或更多 字符或二进制字符串,列, 或字符串和列的组合 将一个表达式命名为一个表达式 操作者)。
Expression是任何有效的Microsoft®SQLServer™ 表达任何数据类型 字符和二进制数据类型 类别,图像,ntext或 文本数据类型。这两个表达必须 具有相同的数据类型,或一个 表达必须能够 隐式转换为数据类型 另一个表达。
所以...没有隐式转换int到string ...这是一个内部问题
答案 1 :(得分:1)
我不是说这肯定会有效,而且我不会在我的sql管理工作室附近尝试发布之前,但是你试过这样的事情:
@SQL = @SQL + 'Where ID = ' + @SomeID
EXEC(@SQL)