Sql 将varchar值“UPDATE table SET TypeId=”转换为数据类型int时,转换失败
我需要用从桌面应用程序作为参数传递的值更新表。但每次尝试运行查询时,我都会遇到以下错误: Msg 245,16级,状态1,第5行 转换varchar值“UPDATE”时转换失败 桌子 设置 TypeId='到数据类型int 我试图通过将代码减少到最低限度来隔离问题,下面是我实际代码的最短片段,但问题仍然存在。我认为这很可能是一个语法问题,但在浏览了一段时间类似的问题后,我似乎仍然无法找出问题所在Sql 将varchar值“UPDATE table SET TypeId=”转换为数据类型int时,转换失败,sql,sql-server,type-conversion,Sql,Sql Server,Type Conversion,我需要用从桌面应用程序作为参数传递的值更新表。但每次尝试运行查询时,我都会遇到以下错误: Msg 245,16级,状态1,第5行 转换varchar值“UPDATE”时转换失败 桌子 设置 TypeId='到数据类型int 我试图通过将代码减少到最低限度来隔离问题,下面是我实际代码的最短片段,但问题仍然存在。我认为这很可能是一个语法问题,但在浏览了一段时间类似的问题后,我似乎仍然无法找出问题所在 DECLARE @typeId int = 175; DECLARE @item varchar(2
DECLARE @typeId int = 175;
DECLARE @item varchar(20)= 'ABC123'
DECLARE @SQLScript varchar(5000);
SET @SQLScript = 'UPDATE
table
SET
TypeId = ' + @typeId + '
WHERE item = ''' + @item + '''
'
Print(@SQLScript);
我所期望的结果是Print@SQLScript是
查询:
UPDATE
table
SET
TypeId = 175
WHERE
item = 'ABC123'
您需要将@typeID转换为字符串以连接它:
DECLARE @typeId int = 175;
DECLARE @item varchar(20)= 'ABC123'
DECLARE @SQLScript varchar(5000);
SET @SQLScript = 'UPDATE
table
SET
TypeId = ' + CONVERT(VARCHAR(128),@typeId) + '
WHERE item = ''' + @item + '''
'
PRINT(@SQLScript);
您需要将@typeID转换为字符串以连接它:
DECLARE @typeId int = 175;
DECLARE @item varchar(20)= 'ABC123'
DECLARE @SQLScript varchar(5000);
SET @SQLScript = 'UPDATE
table
SET
TypeId = ' + CONVERT(VARCHAR(128),@typeId) + '
WHERE item = ''' + @item + '''
'
PRINT(@SQLScript);
您需要将@typeId转换为VARCHAR
您需要将@typeId转换为VARCHAR
为什么在这里使用动态sql?这应该是一个简单的参数化查询。您发布的代码易受sql注入攻击
为什么在这里使用动态sql?这应该是一个简单的参数化查询。您发布的代码易受sql注入攻击
我不知道为什么您需要在这里使用动态SQL,因为您可以简单地这样做
DECLARE @TypeId INT = 175,
@Item VARCHAR(20) = 'ABC123';
UPDATE T
SET TypeId = @TypeId
WHERE Item = @Item;
但是,如果您真的需要使用动态SQL,那么请以正确的方式使用它
DECLARE @TypeId INT = 175,
@Item VARCHAR(45) = 'ABC123';
EXEC sp_executesql N'UPDATE T SET TypeId = @TypeId WHERE Item = @Item',
N'@TypeId INT, @Item VARCHAR(45)',
@TypeId,
@Item;
下面是一个示例,看看它是如何工作的。我不知道您为什么需要在这里使用动态SQL,因为您可以简单地使用动态SQL
DECLARE @TypeId INT = 175,
@Item VARCHAR(20) = 'ABC123';
UPDATE T
SET TypeId = @TypeId
WHERE Item = @Item;
但是,如果您真的需要使用动态SQL,那么请以正确的方式使用它
DECLARE @TypeId INT = 175,
@Item VARCHAR(45) = 'ABC123';
EXEC sp_executesql N'UPDATE T SET TypeId = @TypeId WHERE Item = @Item',
N'@TypeId INT, @Item VARCHAR(45)',
@TypeId,
@Item;
下面是一个示例,看看它是如何工作的。谢谢,这似乎解决了我的问题。如果我的TypeId字段是一个int,它还会被分配为一个整数吗?@SeanMathew是的,您将它转换为一个字符串以用作动态SQL,但是当您查看最终的更新字符串时,如果有意义的话,它是一个数字。i、 e.在动态sql中,您有TypeId=175,这是期望的结果。感谢您的解释,我想我现在已经很好地理解了这个概念@SeanMathew看起来也和SeanLange的答案一样。谢谢,这似乎解决了我的问题。如果我的TypeId字段是一个int,它还会被分配为一个整数吗?@SeanMathew是的,您将它转换为一个字符串以用作动态SQL,但是当您查看最终的更新字符串时,如果有意义的话,它是一个数字。i、 e.在动态sql中,您有TypeId=175,这是期望的结果。感谢您的解释,我想我现在已经很好地理解了这个概念@SeanMathew看起来也和SeanLange的答案一样。