【问题标题】:Error in stored procedure near 00 附近的存储过程出错
【发布时间】:2012-11-22 18:56:37
【问题描述】:

我在 SQL Server 中有以下存储过程:

DECLARE @SQL_DtsAcumGPSDataZeros NVARCHAR(MAX);
SET @SQL_DtsAcumGPSDataZeros= N'SELECT [counter]
      ,[iID]
      ,[iVehicleID]
      ,[fTripDistance]
      ,[dtDateTime]
      ,[fLongitude]
      ,[fLatitude]
      ,[bLatLongValid]
      ,[fSpeed]
      ,[bIgnition]
      ,[bStopFlag]
      ,[fTripTime]
      ,[bWorkHours]
      ,[iLogReason]
      ,[bLatLongValidGuess]
      ,[bAux1]
      ,[bAux2]
      ,[bAux3]
      ,[bAux4]
      ,[bAux5]
      ,[bAux6]
      ,[bAux7]
      ,[bAux8]
  INTO ' + @DtsAcumGPSDataZeros + N' 
  FROM ' + @DtsAcumGPSData +
  N' WHERE fTripDistance= 0'
  EXECUTE sp_executesql @SQL_DtsAcumGPSDataZeros
  PRINT @SQL_DtsAcumGPSDataZeros
  GO

然后得到错误

消息 102,第 15 级,状态 1,第 2 行
'0' 附近的语法不正确。

【问题讨论】:

  • 你能解释一下fTripDistance表的结构吗? @DtsAcumGPSDataZeros@DtsAcumGPSData 是什么?
  • DtsAcumGPSData 包含字段fTripDistance,该字段为dsts 类型float 且不允许为null。变量 atDtsAcumGPSDataZeros only 设置如下: DECLARE atDtsAcumGPSDataZeros VARCHAR (50); SET atDtsAcumGPSDataZeros='To'+ atNAutobus + 'DtsAcumGPSDataZeros' 其中 atNAutobus 的数据类型为 NVARCHAR(4) --at=arroba
  • 您的PRINT 命令显示什么?在执行 SQL 语句之前调用它!
  • print 命令只打印 sqlstatement 并放置变量的值和执行的 stament
  • 打印命令:SELECT [counter] ,[iID] ,[iVehicleID] ,[fTripDistance] ,[dtDateTime] ,[fLongitude] ,[fLatitude] ,[bLatLongValid] ,[fSpeed] ,[ bIgnition] ,[bStopFlag] ,[fTripTime] ,[bWorkHours] ,[iLogReason] ,[bLatLongValidGuess] ,[bAux1] ,[bAux2] ,[bAux3] ,[bAux4] ,[bAux5] ,[bAux6] ,[bAux7] ,[bAux8] INTO To245DtsAcumGPSDataZeros FROM To245DtsAcumGPSData WHERE fTripDistance= 0

标签: sql sql-server-2005 stored-procedures sql-server-2008-r2


【解决方案1】:

尽量使用0作为参数

DECLARE @SQL_DtsAcumGPSDataZeros NVARCHAR(MAX),
        @id int = 0
SET @SQL_DtsAcumGPSDataZeros= N'SELECT [counter]
      ,[iID]
      ,[iVehicleID]
      ,[fTripDistance]
      ,[dtDateTime]
      ,[fLongitude]
      ,[fLatitude]
      ,[bLatLongValid]
      ,[fSpeed]
      ,[bIgnition]
      ,[bStopFlag]
      ,[fTripTime]
      ,[bWorkHours]
      ,[iLogReason]
      ,[bLatLongValidGuess]
      ,[bAux1]
      ,[bAux2]
      ,[bAux3]
      ,[bAux4]
      ,[bAux5]
      ,[bAux6]
      ,[bAux7]
      ,[bAux8]
  INTO ' + @DtsAcumGPSDataZeros + N'
  FROM ' + @DtsAcumGPSData +
  N' WHERE id = @id'
  EXEC sp_executesql @SQL_DtsAcumGPSDataZeros, N'@id nvarchar(100)', @id
  PRINT @SQL_DtsAcumGPSDataZeros

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 2020-07-05
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多