0

我有这个 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

我收到此错误:

消息 245,级别 16,状态 1,过程 AutobusGenerico,第 46 行将
nvarchar 值“UPDATE To245DtsAcumGPSData SET”转换为数据类型 int 时转换失败

有任何想法吗?

我想为列设置一个计数器COUNTER

4

2 回答 2

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

与此行相同 - 似乎@NAutobusint

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

这些字段必须转换为字符串才能连接到您的查询字符串。

于 2012-11-21T22:45:06.603 回答
0

除非将数字转换为文本,否则不能将数字与文本连接

SET @DtsAcumGPSData='To'+ CAST(@NAutobus AS VARCHAR) + 'DtsAcumGPSData'

INTO '+ CAST(@DtsAcumGPSData AS VARCHAR) +

WHERE iVehicleID ='+ CAST(@NAutobus AS VARCHAR) + 
于 2012-11-21T22:46:58.227 回答