2012-03-22 152 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