我运行SQL分析器并且我想在查询分析器中运行一些查询,但是我收到错误“SQL Server:找不到带有句柄x的预处理语句”。
有什么想法吗?
这是我从探查器中复制的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 :(得分:12)
这是我的第二个答案,我在写第一个问题时误解了这个问题。
你为什么要做set @p1=10
?你不应该设置这个变量。尝试删除它
答案 1 :(得分:10)
您应该使用不RPC:Starting
RPC:Completed
个查询
在分析器中,您通常会看到RPC:Starting
和RPC:Completed
。 RPC:Staring
中显示的语句是您需要选择的语句,RPC:Completed
将包含未从客户端传递的输出值。
如果您使用RPC:Completed
,则应移除SET set @p1=10
要运行的查询
答案 2 :(得分: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