Я знаю, что sub-запрос возвращает более одного запроса в основной запрос, но я не знаю, как избежать этой ошибки, может ли кто-нибудь мне помочь?
Ответ 5
USE [SmartOffice]
GO
/****** Object: StoredProcedure [dbo].[usp_DeviceMapping] Script Date: 02-02-2019 15:15:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[usp_DeviceMapping]
AS BEGIN
SELECT DeviceId,DTypeId,DType from DeviceMapping
DECLARE @DType INT;
DECLARE @DeviceLogId int;
DECLARE @DownloadDate Date;DECLARE @DeviceId INT;
DECLARE @UserId varchar(50);DECLARE @LogDate Date;
DECLARE @Direction varchar(10);DECLARE @AlternateAttDirection varchar(10);
DECLARE @AttDirection varchar(10);DECLARE @StatusCode varchar(10);
DECLARE @WorkCode INT;DECLARE @Duration INT;DECLARE @Remarks varchar(500);DECLARE @SMSFlag INT;
DECLARE @VerificationMode varchar(50);DECLARE @IsApproved INT;
DECLARE @AttenndanceMarkingType varchar(50);DECLARE @AttMarkAndroidIMEINo varchar(50);
DECLARE @ManagerRemarks varchar(200);DECLARE @LogRecordLocation varchar(500);
DECLARE @Lattitude varchar(50);DECLARE @Longitude varchar(50);
DECLARE @NetworkLattitude varchar(50); DECLARE @NetworkLongitude varchar(50);
DECLARE @NetworkLocation varchar(500)
DECLARE cur_Smart CURSOR
STATIC FOR
SELECT DeviceLogId,AttenndanceMarkingType,DownloadDate,DeviceId,UserId,LogDate,Direction,AttDirection,
AlternateAttDirection,StatusCode,WorkCode,Duration,Remarks,SMSFlag,VerificationMode,IsApproved,
LogRecordLocation,ManagerRemarks,AttMarkAndroidIMEINo,Lattitude,Longitude,NetworkLattitude,
NetworkLongitude,NetworkLocation FROM DeviceLogs_1_2019
SELECT DeviceId,DeviceFName FROM Devices
SELECT DTypeId,DType FROM DeviceMapping
OPEN cur_Smart
IF @@CURSOR_ROWS > 0
BEGIN
FETCH NEXT FROM cur_Smart INTO @DeviceLogId,@AttenndanceMarkingType,@DownloadDate,@DeviceId,@UserId,@LogDate,@Direction,@AttDirection,
@AlternateAttDirection,@StatusCode,@WorkCode,@Duration,@Remarks,@SMSFlag,@VerificationMode,@IsApproved,
@LogRecordLocation,@ManagerRemarks,@AttMarkAndroidIMEINo,@Lattitude,@Longitude,@NetworkLattitude,
@NetworkLongitude,@NetworkLocation
SET @DType = (SELECT DType FROM DeviceMapping DM
WHERE [email protected])
if(@DType=1)
insert into DeviceLogs_Workmen(DownloadDate,DeviceId,UserId,LogDate,
Direction,AttDirection,AlternateAttDirection,StatusCode,WorkCode,Duration,Remarks,SMSFlag,VerificationMode,
IsApproved,AttenndanceMarkingType,AttMarkAndroidIMEINo,ManagerRemarks,LogRecordLocation,Lattitude,Longitude)
values (@DownloadDate,@DeviceId,@UserId,@LogDate,
@Direction,@AttDirection,@AlternateAttDirection,@StatusCode,@WorkCode,@Duration,@Remarks,@SMSFlag,@VerificationMode,
@IsApproved,@AttenndanceMarkingType,@AttMarkAndroidIMEINo,@ManagerRemarks,@LogRecordLocation,@Lattitude,@Longitude);
ELSE
insert into DeviceLogs_Staff (DownloadDate,DeviceId,UserId,LogDate,
Direction,AttDirection,AlternateAttDirection,StatusCode,WorkCode,Duration,Remarks,SMSFlag,VerificationMode,
IsApproved,AttenndanceMarkingType,AttMarkAndroidIMEINo,ManagerRemarks,LogRecordLocation,Lattitude,Longitude)
values (@DownloadDate,@DeviceId,@UserId,@LogDate,
@Direction,@AttDirection,@AlternateAttDirection,@StatusCode,@WorkCode,@Duration,@Remarks,@SMSFlag,@VerificationMode,
@IsApproved,@AttenndanceMarkingType,@AttMarkAndroidIMEINo,@ManagerRemarks,@LogRecordLocation,@Lattitude,@Longitude);
FETCH NEXT FROM cur_Smart INTO @DeviceLogId,@AttenndanceMarkingType,@DownloadDate,@DeviceId,@UserId,@LogDate,@Direction,@AttDirection,
@AlternateAttDirection,@StatusCode,@WorkCode,@Duration,@Remarks,@SMSFlag,@VerificationMode,@IsApproved,
@LogRecordLocation,@ManagerRemarks,@AttMarkAndroidIMEINo,@Lattitude,@Longitude,@NetworkLattitude,
@NetworkLongitude,@NetworkLocation
END
END
CLOSE cur_Smart
DEALLOCATE cur_Smart
SET NOCOUNT OFF
Подзапрос вернул более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения