2012-03-22 154 views
15

我运行SQL分析器,我想在查询分析器中运行一些查询,但出现错误“SQL Server:找不到预处理语句处理x“。SQL Server:找不到预处理语句与查询分析器的句柄10

任何想法?

这是我从探查复制的SQL:

declare @p1 int 
set @p1=10 
exec sp_prepare @p1 output,N'@P0 int,@P1 nvarchar(4000),@P2 datetime,@P3 datetime,@P4 datetime,@P5 datetime,@P6 datetime,@P7 datetime',N'SELECT * FROM SCHEDULE WITH (NOLOCK) WHERE RoomNo= @P0 AND STATUS = @P1 AND ((EndTimeDT <= @P2 AND EndTimeDT > @P3) OR (StartTimeDT >= @P4 AND StartTimeDT < @P5) OR (StartTimeDT <= @P6 AND EndTimeDT > @P7))',1 
select @p1 
go 
exec sp_execute 10,19,N'A','2012-03-22 16:30:00','2012-03-22 16:00:00','2012-03-22 16:00:00','2012-03-22 16:30:00','2012-03-22 16:00:00','2012-03-22 16:30:00' 
go 
+0

在相应的* RPC:开始*事件,文本数据可能包含'@设置P1 = NULL'。 [史密斯的回答](http://stackoverflow.com/a/22495122/173497)提到这一点。 – 2014-08-08 19:18:37

+0

仅供参考 - 这看起来像Cognos如何将查询传递给SQL Server。 – 2014-08-26 15:54:51

回答

11

这是我的第二个答案,我误解了这个问题,当我写的第一个。

你为什么要做set @p1=10?你不应该设置这个变量。尝试删除它

+6

这正是探查器的textData字段中的内容。 – sproketboy 2012-03-23 09:02:01

3

看来你需要修改探查器文本,如果你想在查询分析器中运行它。

declare @p1 int 
exec sp_prepare @p1 output,N'@P0 int,@P1 nvarchar(4000),@P2 datetime,@P3 datetime,@P4 datetime,@P5 datetime,@P6 datetime,@P7 datetime',N'SELECT * FROM SCHEDULE WITH (NOLOCK) WHERE RoomNo= @P0 AND STATUS = @P1 AND ((EndTimeDT <= @P2 AND EndTimeDT > @P3) OR (StartTimeDT >= @P4 AND StartTimeDT < @P5) OR (StartTimeDT <= @P6 AND EndTimeDT > @P7))',1 
select @p1 
exec sp_execute @p1,19,N'A','2012-03-22 16:30:00','2012-03-22 16:00:00','2012-03-22 16:00:00','2012-03-22 16:30:00','2012-03-22 16:00:00','2012-03-22 16:30:00' 
go 
7

您应该使用RPC:Starting查询不RPC:Completed

在探查你通常会看到RPC:StartingRPC:CompletedRPC:Staring中显示的语句是您需要选择的内容,RPC:Completed将包括未从客户端传递的输出值。

如果使用RPC:Completed你应该删除SET set @p1=10查询工作

+1

默认情况下,不会跟踪RPC:Starting事件。当开始一个新的跟踪时,你需要选中“显示所有事件”并选中“RPC:Starting”。 – Stijn 2017-07-26 06:51:51