我有这个查询:
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 时转换失败。
我有这个查询:
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 时转换失败。
您的 @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'
然后执行它?
您显然不需要动态 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
int
成字符串 =>强制转换问题不在于 SQL 何时执行,而是在它生成之前,因为您正在连接字符串和整数变量。
你应该转换你的整数变量:
select @selectsql = 'SELECT ' + cast(@cnt as nvarchar) + ' = COUNT(*) FROM Vwbckup'
但是您确实意识到变量的值将被连接到您的结果字符串中。我不确定你想要那个...