我有这个问题:
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时转换失败。
答案 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'
但是您确实意识到变量的值将连接到结果字符串中。我不确定你想要那个......