Sql server 2008 转换varchar值时转换失败';选择';到数据类型int
我有一个疑问:Sql server 2008 转换varchar值时转换失败';选择';到数据类型int,sql-server-2008,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时,转换失败 @cnt变量的类型为
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'
然后执行它?将一个int
连接成一个字符串=>cast
问题不在于何时执行SQL,而是在生成SQL之前,因为您正在连接字符串和整数变量
您应该强制转换整数变量:
select @selectsql = 'SELECT ' + cast(@cnt as nvarchar) + ' = COUNT(*) FROM Vwbckup'
但您确实意识到变量的值将被连接到结果字符串中。我不确定您是否想要…显然,您不需要使用动态SQL来完成此任务,但如果您出于某种原因没有显示出来,则根本不需要连接该部分。您可以使用
输出
参数
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
是的,但是我也没有使用N编写其他查询,它们正在执行