Que*_*CPO 2 t-sql sql-server-2008-r2
我收到一个错误:
将varchar值'INSERT INTO TableRowCount(IntFieldID,DecimalField)SELECT'转换为数据类型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
Run Code Online (Sandbox Code Playgroud)
如果我删除IntFieldID和@start,它将与一个插入工作(虽然它失败的目的).我已经尝试过包含一个SELECT CAST(' + @start + ' AS INT),这似乎有点多余,因为@start它INT已经是一个(INT作为一个INT),但这也不起作用.我也尝试从一个N' DYNAMIC-SQL开始,它没有用,我尝试使用三个'''围绕一切(没有'工作),并在我在线阅读的几个地方,响应建议将变量放在字符串中,这产生了错误:
必须声明标量变量@start
(毫不奇怪,因为这听起来不正确).
比尝试连接整数更好的方法是将其作为强类型参数传递:
DECLARE @start INT = 1;
DECLARE @sql NVARCHAR(MAX) = N'INSERT ...
SELECT @start, COUNT(*) FROM ' + @conn;
EXEC sp_executesql @sql, N'@start INT', @start;
Run Code Online (Sandbox Code Playgroud)