将varchar值'SELECT'转换为数据类型int时转换失败

时间:2012-11-28 14:13:40

标签: sql-server-2008

我有这个问题:

DECLARE @selectsql nvarchar(4000),
DECLARE @cnt int

select @selectsql = ' SELECT ' + @cnt + '= COUNT(*) FROM Vwbckup' 

print @selectsql
print @cnt

EXEC sp_executesql @selectsql

当我执行查询时,我收到此错误:

  

将varchar值'SELECT'转换为数据类型int时转换失败。

3 个答案:

答案 0 :(得分:6)

您的@cnt变量是INT类型 - 您需要将其强制转换为NVARCHAR以连接在一起:

DECLARE @selectsql nvarchar(4000),
DECLARE @cnt int

SELECT @selectsql = N' SELECT ' + CAST(@cnt AS NVARCHAR(10)) + N'= COUNT(*) FROM Vwbckup' 

另外:你应该用N 前缀你的字符串文字来表示Unicode(NVARCHAR)字符串

更新:以前的命令根本没有任何意义....你的意思是创建这个命令字符串吗?

SELECT @selectsql = N' SELECT @cnt = COUNT(*) FROM Vwbckup' 

然后执行它?

答案 1 :(得分:1)

你显然不需要动态SQL,但是如果由于某种原因你没有显示,你根本不需要连接那个部分。您可以使用OUTPUT参数。

DECLARE @selectsql NVARCHAR(4000),
        @cnt       INT

SELECT @selectsql = N'SELECT @cnt = COUNT(*) FROM Vwbckup'

PRINT @selectsql

PRINT @cnt

EXEC sp_executesql
  @selectsql,
  N'@cnt int output',
  @cnt OUTPUT

SELECT @cnt 

答案 2 :(得分:0)

int连接到字符串=>施展它

问题不在于SQL执行时,而是在它生成之前,因为你要连接字符串和整数变量。

你应该转换整数变量:

select @selectsql = 'SELECT ' + cast(@cnt as nvarchar) + ' = COUNT(*) FROM Vwbckup'

但是您确实意识到变量的值将连接到结果字符串中。我不确定你想要那个......