我在执行以下查询时遇到上述错误,这是存储过程命令行执行
exec sp_Bind_Division_Store_Camera_On_Filter_In_Liveview
null, null, null, null
存储过程如下
ALTER PROCEDURE [dbo].[sp_Bind_Division_Store_Camera_On_Filter_In_Liveview]
@division varchar(45),
@store varchar(45),
@camera varchar(68),
@group varchar(100)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE
@BaseQuery nvarchar(max) = 'select
distinct tblcameradetails.name as CameraName,
tblcameradetails.IsDeviceEnabled,
tblcameradetails.cameraID,
tblcameradetails.deviceIP,
tblmediasourcedetails.StreamName,
tblmediasourcedetails.streamID,
tblcameradetails.Model_ID,
tblcameradetails.IsHidden,
tblcameradetails.hasPTZcapability,
tblcameradetails.CameraModelNo,
tblcameradetails.username as CameraUserName,
tblcameradetails.hasPTZCycle,
tblcameradetails.hasPreset,
tblcameradetails.password as CameraPassword,
tblmediasourcedetails.isRecordingStarted as IsRecordingOn,
tblcameradetails.IsCovert,
tblcameradetails.constCameraName,
tblmediasourcedetails.constStreamName,
tblstoredetails.Store_ID,
tblsystemlocationdetails.division,
tblstoredetails.Store_Name,
tblstoredetails.Store_IP,
tblstoreconfiguration.Liveview_Session_Timeout
from
tblmediasourcedetails,
tblcameradetails,
tblcameragroupdetails,
tblgroupdetails,
tblvssaddsourcedetails,
tblsystemlocationdetails,
tblstoredetails,
tblstoreconfiguration'
, @ParamList nvarchar(max) = N'@p1 varchar(45), @p2 varchar(45), @p3 varchar(68), @p4 varchar(100)'
, @WhereClause nvarchar(max) = N'where
tblmediasourcedetails.cameraID=tblcameradetails.cameraID
and tblmediasourcedetails.streamID=tblvssaddsourcedetails.streamID
and tblcameradetails.cameraID = tblcameragroupdetails.cameraID
and tblcameragroupdetails.groupID=tblgroupdetails.groupID
and tblstoredetails.Store_ID= tblcameradetails.Store_ID
and tblsystemlocationdetails.Store_ID= tblstoredetails.Store_ID
and tblstoredetails.Store_ID=tblstoreconfiguration.Store_ID and 1=1'
, @OrderByClause nvarchar(100) = 'order by CameraName';
IF @division IS NOT NULL
BEGIN
SET @WhereClause = @WhereClause + ' and division like (@p1)';
END
IF @store IS NOT NULL
BEGIN
SET @WhereClause = @WhereClause + ' and (store like (@p2))';
END
IF @camera IS NOT NULL
BEGIN
SET @WhereClause = @WhereClause + ' and tblcameradetails.name like (@p3)';
END
IF @group IS NOT NULL
BEGIN
SET @WhereClause = @WhereClause + ' and tblgroupdetails.name in (@p4)';
END
SET @BaseQuery = @BaseQuery + @WhereClause + @OrderByClause;
EXECUTE sp_executesql @BaseQuery, @ParamList, @p1 = @division, @p2 = @store, @p3 = @camera, @p4 = @group;
END
现在,错误向我显示第34行在“。”附近的语法处有错误,但我没有发现任何问题,因为我在存储过程中使用的查询表单命令提示符运行得非常好,因此会引发错误。请帮我解决这个问题。
您可以轻松地打印变量@BaseQuery
以检查结果查询。
变量中的查询@BaseQuery
如下所示
select
distinct tblcameradetails.name as CameraName,
tblcameradetails.IsDeviceEnabled,
tblcameradetails.cameraID,
tblcameradetails.deviceIP,
tblmediasourcedetails.StreamName,
tblmediasourcedetails.streamID,
tblcameradetails.Model_ID,
tblcameradetails.IsHidden,
tblcameradetails.hasPTZcapability,
tblcameradetails.CameraModelNo,
tblcameradetails.username as CameraUserName,
tblcameradetails.hasPTZCycle,
tblcameradetails.hasPreset,
tblcameradetails.password as CameraPassword,
tblmediasourcedetails.isRecordingStarted as IsRecordingOn,
tblcameradetails.IsCovert,
tblcameradetails.constCameraName,
tblmediasourcedetails.constStreamName,
tblstoredetails.Store_ID,
tblsystemlocationdetails.division,
tblstoredetails.Store_Name,
tblstoredetails.Store_IP,
tblstoreconfiguration.Liveview_Session_Timeout
from
tblmediasourcedetails,
tblcameradetails,
tblcameragroupdetails,
tblgroupdetails,
tblvssaddsourcedetails,
tblsystemlocationdetails,
tblstoredetails,
tblstoreconfigurationwhere
tblmediasourcedetails.cameraID=tblcameradetails.cameraID
and tblmediasourcedetails.streamID=tblvssaddsourcedetails.streamID
and tblcameradetails.cameraID = tblcameragroupdetails.cameraID
and tblcameragroupdetails.groupID=tblgroupdetails.groupID
and tblstoredetails.Store_ID= tblcameradetails.Store_ID
and tblsystemlocationdetails.Store_ID= tblstoredetails.Store_ID
and tblstoredetails.Store_ID=tblstoreconfiguration.Store_ID and 1=1order by CameraName
您会看到在WHERE
andORDER BY
子句之前缺少空格
您需要像这样在WHERE
和的开头添加一个空格ORDER BY
@WhereClause nvarchar(max) = N' where
@OrderByClause nvarchar(100) = ' order by CameraName';
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句