我正在将INSERT
SQL 中的一条语句与存储在变量中的值放在一起,这些变量来自CURSOR
我正在循环的 a。在执行指令INSERT
时,我收到一个无效的标识符错误。
我正在处理的代码如下,它位于从游标获取数据的重复循环中:
IF (@Estado = 'V')
SET @NuevoEstado = 'ACT'
ELSE
SET @NuevoEstado = 'ANU'
SET @ClienteId = (
SELECT ClienteId
FROM QueryClientesDescriptivo
WHERE CodigoContribuyente = @RUC
AND Estado = 'ACT'
)
SET @MovimientoInventarioId = @MovimientoInventarioId + 1
SET @Query = 'INSERT INTO [COMPU90].[SIV3].[dbo].MovimientosInventario (CompaniaId, MovimientoInventarioId, TipoMovimientoInventarioId, Fecha, Glosa, AlmacenId, PersonaId, Estado, OrigenId, Migracion) ' + 'VALUES (' + CHAR(39) + '10043' + CHAR(39) + ',' + CHAR(39) + CONVERT(VARCHAR, @MovimientoInventarioId) + CHAR(39) + ',' + CHAR(39) + 'SVEN' + CHAR(39) + ',' + CHAR(39) + CONVERT(VARCHAR, @Fecha, 101) + CHAR(39) + ',' + CHAR(39) + '' + CHAR(39) + ',' + CHAR(39) + '2' + CHAR(39) + ',' + CHAR(39) + CONVERT(VARCHAR, @ClienteId) + CHAR(39) + ',' + CHAR(39) + @NuevoEstado + CHAR(39) + ',' + CHAR(39) + '0' + CHAR(39) + ',' + CHAR(39) + '0' + CHAR(39) + ')'
EXEC @Query
我收到的错误消息如下:
名称 'INSERT INTO [COMPU90].[SIV3].[dbo].MovementsInventory (CompanyId, MovementInventoryId, TypeMovementInventoryId, Date, Gloss, WarehouseId, PersonId, State, OriginId, Migration) VALUES ('10043','141907',' SVEN','01/04/2016','','2','253624','ANU','0','0')' 不是有效标识符。
我尝试更改日期的格式,传递参数的方式,但没有办法让我摆脱该错误,但是,当直接执行它时,它可以正常工作而不会给我错误。
在执行查询的行上添加括号:
您还可以使用我在其他问题
sp_executesql
中提到的存储过程启动查询您将使用的代码如下(在我的示例中,我创建了一个循环来插入 10 条记录):
这样做的好处是代码更简洁,更易于维护,并且参数是类型化的。
并且可能更优化,因为作为参数化查询,将有一个执行计划