我收到一个错误:
当将varchar值“插入到TableRowCount (IntFieldID,DecimalField)选择”转换为数据类型int时,转换失败
使用以下代码:
DECLARE @start INT -- @start is an INT
SET @start = 1 -- INT
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'INSERT INTO TableRowCount (IntFieldID, DecimalField)
SELECT ' + @start +', COUNT(*)
FROM dbo.somewhere' -- location is irrelevant
EXECUTE(@sql) -- this is where it fails如果我删除IntFieldID和@start,它将与插入一起工作(尽管它违背了目的)。我尝试过包括一个SELECT CAST(' + @start + ' AS INT),这似乎有点多余,因为@start已经是一个INT (将INT转换为INT),但这也不起作用。我还尝试从一个不起作用的DYNAMIC-SQL,开始,我试着在所有东西(没有工作)周围使用三个''',在我在线阅读的几个地方,响应建议将变量放在字符串中,这会产生错误:
必须声明标量变量@start
(这并不奇怪,因为这听起来不对)。
发布于 2013-03-28 14:40:55
您需要将您的@Start转换为varchar。
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'INSERT INTO TableRowCount (IntFieldID, DecimalField)
SELECT ' + CAST(@start as nvarchar(20)) +', COUNT(*)
FROM ' + @connSQL Server基于一些相当复杂的标准隐式地在级联或添加的数据类型之间进行转换。可以这样说,如果您试图组合一个int和一个字符串,它将始终尝试将该字符串转换为一个int,除非您显式地告诉它。
下面是参考来自MSDN。的转换图

发布于 2013-03-28 14:43:52
一个比尝试连接一个整数更好的方法是将它作为强类型参数传入:
DECLARE @start INT = 1;
DECLARE @sql NVARCHAR(MAX) = N'INSERT ...
SELECT @start, COUNT(*) FROM ' + @conn;
EXEC sp_executesql @sql, N'@start INT', @start;https://stackoverflow.com/questions/15684701
复制相似问题