使用更新SQL Server生成计数器

时间:2012-11-21 22:42:40

标签: sql sql-server-2008 sql-server-2008-r2

我有这个T-SQL代码:

DECLARE @DtsAcumGPSData VARCHAR (50);
SET @DtsAcumGPSData='To'+ @NAutobus + 'DtsAcumGPSData'
--
DECLARE @SQL_DtsAcumGPSData NVARCHAR(MAX);

SET @SQL_DtsAcumGPSData = N'SELECT 
      COUNTER = 0
      ,[iID]
      ,[iVehicleID]
      ,[fTripDistance]
      ,[dtDateTime]
      ,[fLongitude]
      ,[fLatitude]
      ,[bLatLongValid]
      ,[fSpeed]
      ,[bIgnition]
      ,[bStopFlag]
      ,[fTripTime]
      ,[bWorkHours]
      ,[iLogReason]
      ,[bLatLongValidGuess]
      ,[bAux1]
      ,[bAux2]
      ,[bAux3]
      ,[bAux4]
      ,[bAux5]
      ,[bAux6]
      ,[bAux7]
      ,[bAux8]
INTO '+ @DtsAcumGPSData +
N' FROM GPSData 
WHERE iVehicleID ='+ @NAutobus + --245
N'ORDER BY dtDateTime';
EXEC sp_executesql @SQL_DtsAcumGPSData;

-- ##########################################################
-- ACTUALIZANDO CONTADOR
DECLARE @COUNTER INT
SET @COUNTER = 0
DECLARE @SQL_UPDATE_DtsAcumGPSData NVARCHAR (MAX)
SET @SQL_UPDATE_DtsAcumGPSData=
N'UPDATE ' +@DtsAcumGPSData+ N'
SET '+ @COUNTER +N'= COUNTER = ' +@COUNTER+1
EXECUTE sp_executesql @SQL_UPDATE_DtsAcumGPSData

我收到此错误:

  

Msg 245,Level 16,State 1,Procedure AutobusGenerico,Line 46
  转换nvarchar值'UPDATE时转换失败   To245DtsAcumGPSData SET'到数据类型int

有什么想法吗?

我想为列COUNTER

设置一个计数器

2 个答案:

答案 0 :(得分:1)

当您使用Dynamic SQL时,您的查询是一个字符串,因此当您将数值连接到它时,您必须convert它,否则您将收到错误。

您的@Counter值为int,需要将其转换为包含在查询字符串中:

DECLARE @COUNTER INT
SET @COUNTER = 0
DECLARE @SQL_UPDATE_DtsAcumGPSData NVARCHAR (MAX)
SET @SQL_UPDATE_DtsAcumGPSData=
N'UPDATE ' +@DtsAcumGPSData+ N'SET '+ cast(@COUNTER as varchar(50)) +N'= COUNTER = ' +cast(@COUNTER+1 as varchar(50))
EXECUTE sp_executesql @SQL_UPDATE_DtsAcumGPSData

与此行相同 - @NAutobus似乎是int

WHERE iVehicleID ='+ convert(@NAutobus as varchar(50)) 

必须将这些字段转换为要连接到查询字符串的字符串。

答案 1 :(得分:0)

除非将数字转换为文本

,否则无法将数字与文本连接
SET @DtsAcumGPSData='To'+ CAST(@NAutobus AS VARCHAR) + 'DtsAcumGPSData'

INTO '+ CAST(@DtsAcumGPSData AS VARCHAR) +

WHERE iVehicleID ='+ CAST(@NAutobus AS VARCHAR) +