У меня есть таблица, которая имеет триггер, который вызовет определенный SP, который анализирует строку, вызванную триггером.Ошибка преобразования типа данных varchar в float в запуске триггера, который вызывает SP
Вот строки выброшенные триггером
351856040520298,241111; 1G, 141007024755, А, 1437.2453N, 12100.2887E, 3.10,206,0.8,21010000; 2G, 141007024755,10,43.6,14.08 , 00.18,273295019.6
351856040520298,241111; 1R, 141117003059, А, 1420.4629N, 12058.7028E, 0.0,77,0.9,20000006; 2R, 141117003059,11,98.3,12.58,04.10,282098820.9
, поскольку вы можете видеть, что они различаются по длине. Поэтому я переключаю триггер, чтобы вызвать SP, если e длина соответствует.
Вот мой триггер
USE [SMSGPS]
GO
/****** Object: Trigger [dbo].[CallSPGPRSIN] Script Date: 11/17/2014 9:43:44 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[CallSPGPRSIN]
ON [dbo].[GPRSIN]
AFTER INSERT
AS BEGIN
DECLARE @smsgpsmessage varchar(500);
DECLARE @smslen varchar(10);
DECLARE @const varchar(10);
DECLARE @const1 varchar(10);
DECLARE @const2 varchar(10);
DECLARE @const3 varchar(10);
DECLARE @const4 varchar(10);
DECLARE @const5 varchar(10);
SET @smsgpsmessage = (SELECT TOP 1 smsmsg FROM GPRSIN order by smsdt desc);
SET @smslen = (SELECT LEN(@smsgpsmessage));
SET @const = '130';
SET @const1 = '131';
SET @const2 = '132';
SET @const3 = '133';
SET @const4 = '134';
SET @const5 = '135';
if @smslen = @const OR @smslen = @const1 OR @smslen = @const2 OR @smslen = @const3 OR @smslen = @const4 OR @smslen = @const5
EXEC ParsingProcedureRX8 @ProductCode = @smsgpsmessage;
END
Я не знаю, если это правильно или неправильно, но она работает только и только тогда, когда длина 134 или 133.
Теперь будем называть SP как указано в последней части спускового крючка и вот SP
USE [SMSGPS]
GO
/****** Object: StoredProcedure [dbo].[ParsingProcedureRX8] Script Date: 11/17/2014 11:00:09 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ParsingProcedureRX8]
@ProductCode VARCHAR(500)
AS
SET NOCOUNT ON;
INSERT INTO tblKMRUN2(Account,TrxDateTime,PhilTime, Lat, Long, Speed2, DeviceStatus, Engine,
KmRun, ProcStatus)
SELECT [Account] = LEFT(@ProductCode,CHARINDEX(',',@ProductCode) - 1),
[TrxDateTime] = cast(stuff(stuff(stuff((SUBSTRING(@ProductCode, 27, 12)), 7,0,' '), 10,0,':'), 13,0,':') as datetime),
[PhilTime] = cast(stuff(stuff(stuff((SUBSTRING(@ProductCode, 27, 12)), 7,0,' '), 10,0,':'),13,0,':') as datetime),
[Lat] = cast(SUBSTRING(@ProductCode, 42, 9) as float)/100,
[Long] = cast(SUBSTRING(@ProductCode, 53, 10) as float)/100,
[Speed2] = SUBSTRING(@ProductCode, 65, 1),
[statcode] = SUBSTRING(@ProductCode, 78, 8),
[ENGINE] = CASE WHEN (SUBSTRING(@ProductCode, 78, 1) = '2')
THEN 'ON'
ELSE 'OFF' END,
[KM2] = round(cast(right(@ProductCode, 11)as float)/3600, 0, 1),
[ProcStatus] = '0';
при попытке вставить вторую строку, которая является
351856040520298,241111; 1R, 141117003059, А, 1420.4629N, 12058.7028E, 0.0,77,0.9,20000006; 2R, 141117003059,11,98.3,12.58,04.10,282098820.9
он возвращает ошибку, которая говорит,
Msg 8114, Level 16, State 5, Procedure ParsingProcedureRX8, Line 5
Error converting data type varchar to float.
но когда я попробовать использовать другую строку не возвращает ошибку при всех
POlease помощь.
Спасибо.
Вы знаете, что триггеры операции массового отражение в данных в 'inserted'? – bummi