Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 转换varchar值时转换失败';选择';到数据类型int_Sql Server 2008 - Fatal编程技术网

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编写其他查询,它们正在执行