我有这个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
答案 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) +