SQL查询错误:转换varchar值时转换失败
我搜索错误,但我只找到不同的答案,对我来说并不适用 我在SQL Server中有以下查询:SQL查询错误:转换varchar值时转换失败,sql,sql-server,parameters,data-conversion,Sql,Sql Server,Parameters,Data Conversion,我搜索错误,但我只找到不同的答案,对我来说并不适用 我在SQL Server中有以下查询: DECLARE @column_name varchar (25), @data_column int, @table_name varchar (25) DECLARE @mySql nvarchar (MAX) SET NOCOUNT ON; SET @column_name = 'Excellent' SET @table_name = 'CSAT' SET @data_column = 10
DECLARE @column_name varchar (25),
@data_column int,
@table_name varchar (25)
DECLARE @mySql nvarchar (MAX)
SET NOCOUNT ON;
SET @column_name = 'Excellent'
SET @table_name = 'CSAT'
SET @data_column = 10
SET @mySql = 'INSERT INTO '+@table_name+'('+@column_name+') VALUES('+@data_column+')'
EXEC (@mySql)
当我执行它时,它会显示以下错误:
将varchar值“INSERT”转换为CSAT(优秀)值(”转换为数据类型int时,转换失败
所有列都是Int,并且允许为null
我必须进行转换或其他什么?非常感谢您的帮助!@data\u列是一个int,因此您需要将其转换为varchar,因为您正在生成一个字符串
SET @mySql = 'INSERT INTO '+@table_name+'('+@column_name+')
VALUES('+ Convert(Varchar(10), @data_column)+')'
当sql server遇到一个混合了字符串和int的表达式时,它会尝试将字符串转换为int(而不是相反的方式)。这里记录了这一点:@data\u列是int,所以您需要将其转换为varchar,因为您正在生成字符串
SET @mySql = 'INSERT INTO '+@table_name+'('+@column_name+')
VALUES('+ Convert(Varchar(10), @data_column)+')'
当sql server遇到一个混合了字符串和int的表达式时,它会尝试将字符串转换为int(而不是相反)
SET @mySql = 'INSERT INTO '+@table_name+' ('+convert(varchar(50),@column_name)+') VALUES('+@data_column+')'
像这样添加一些空间
SET @mySql = 'INSERT INTO '+@table_name+' ('+convert(varchar(50),@column_name)+') VALUES('+@data_column+')'
sql正在尝试对第行中的字符串求和:
SET @mySql = 'INSERT INTO '+@table_name+'('+@column_name+') VALUES('+@data_column+')'
将@data_column参数从int更改为varchar,或使用CONCAT函数创建SQL命令:
SET @mySql = CONCAT('INSERT INTO ',@table_name,' (',@column_name,') VALUES(',@data_column,')')
sql正在尝试对第行中的字符串求和:
SET @mySql = 'INSERT INTO '+@table_name+'('+@column_name+') VALUES('+@data_column+')'
将@data_column参数从int更改为varchar,或使用CONCAT函数创建SQL命令:
SET @mySql = CONCAT('INSERT INTO ',@table_name,' (',@column_name,') VALUES(',@data_column,')')
您应该使用参数化查询来执行此操作,还应该为对象名称使用适当的数据类型 像这样的
SET NOCOUNT ON;
DECLARE @column_name SYSNAME
,@data_column INT
,@table_name SYSNAME
,@mySql NVARCHAR(MAX);
SET @column_name = 'Excellent'
SET @table_name = 'CSAT'
SET @data_column = 10
SET @mySql = N' INSERT INTO '+ QUOTENAME(@table_name)
+ N' ('+ QUOTENAME(@column_name) +') '
+ N' VALUES( @data_column )'
Exec sp_executesql @mySql
,N'@data_column INT'
,@data_column
您应该使用参数化查询来执行此操作,还应该为对象名称使用适当的数据类型 像这样的
SET NOCOUNT ON;
DECLARE @column_name SYSNAME
,@data_column INT
,@table_name SYSNAME
,@mySql NVARCHAR(MAX);
SET @column_name = 'Excellent'
SET @table_name = 'CSAT'
SET @data_column = 10
SET @mySql = N' INSERT INTO '+ QUOTENAME(@table_name)
+ N' ('+ QUOTENAME(@column_name) +') '
+ N' VALUES( @data_column )'
Exec sp_executesql @mySql
,N'@data_column INT'
,@data_column
如果对照数据库中的表和列检查列名称和表名称,则不存在漏洞。如果对照数据库中的表和列检查列名称和表名称,则不存在漏洞。