SQL查询错误:转换varchar值时转换失败

时间:2015-07-03 17:25:47

标签: 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

SET @mySql = 'INSERT INTO '+@table_name+'('+@column_name+') VALUES('+@data_column+')'
EXEC (@mySql)

当我执行它时,它会显示我的错误:

  

转换varchar值时转换失败'INSERT INTO CSAT(优秀)VALUES('到数据类型int。

所有列都是Int并允许空值。

我必须进行转换或其他什么?感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

@data_column是一个int,所以你需要将它转换为varchar,因为你正在构建一个字符串。

SET @mySql = 'INSERT INTO '+@table_name+'('+@column_name+') 
              VALUES('+ Convert(Varchar(10), @data_column)+')'

当sql server遇到混合字符串和int的表达式时,它会尝试将字符串转换为int(而不是相反)。这在此处记录:SQL Server Data Type Precedence

答案 1 :(得分:0)

添加一些像这样的空间

SET @mySql = 'INSERT INTO '+@table_name+' ('+convert(varchar(50),@column_name)+') VALUES('+@data_column+')'

答案 2 :(得分:0)

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,')')

答案 3 :(得分:0)

您应该使用参数化查询来执行此操作,并对对象名称使用适当的数据类型...

像这样......

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