【发布时间】:2020-03-23 21:06:37
【问题描述】:
我正在创建一个存储过程,我想在其中获取输出参数值。那是打击查询中的@RecordCount INT OUTPUT。但我无法从 SP 下方获取 OUTPUT 参数值。
ALTER PROCEDURE [dbo].[GetOrderListByClient]
@PageIndex INT = 1
,@PageSize INT = 10
,@orderNumber varchar(15) = null,
@ref varchar(255) = null,
@OrderstartDate date = null ,
@OrderEndDate date= null ,
@ClientId varchar(1000) ,
@RecordCount INT OUTPUT
AS
BEGIN
IF @OrderEndDate IS NULL Or @OrderEndDate = ''
SET @OrderEndDate =CONVERT(Varchar(14), GETDATE(),101)
SET @OrderstartDate = CONVERT(varchar(10),@OrderstartDate,101)
SET @OrderEndDate =CONVERT(VARCHAR(10),@OrderEndDate,101)
SET NOCOUNT ON;
DECLARE @QUERY VARCHAR(MAX)
DECLARE @FINALQUERY VARCHAR(MAX)
DECLARE @QUERY2 VARCHAR(MAX)
SET @QUERY =
'
DECLARE @temp table
(
RowNumber int ,
ORDERID int,
ORDERNUM varchar(15) NULL,
READYDATE date NULL,
ref varchar(255) NULL,
PADDR varchar(40) NULL,
DADDR varchar(40) NULL,
DCity varchar(25) NULL,
readyTime datetime2(7) NULL,
PICKTIME time null,
DRV1ID int null,
TOTAL decimal(10,2) NULL,
DeliveryTime time null,
PCITY varchar(40) null,
PICKUP varchar(40) null,
DROPOFF varchar(40) null,
PICTURECOUNT int
)
INSERT INTO @temp
SELECT ROW_NUMBER() OVER
(
ORDER BY [ORDERNUM] DESC
)AS RowNumber
,O.ORDERID, O.ORDERNUM, CONVERT(VARCHAR(11),CAST(O.READYDATE as DATE) ) AS READYDATE,O.Ref,O.PADDR,O.DADDR,
O.DCity,CONVERT(VARCHAR(5),O.readyTime,14)AS readyTime,CONVERT (VARCHAR(5),CAST(O.PICKTIME as Time)) AS PICKTIME,
O.DRV1ID,O.TOTAL,CONVERT (VARCHAR(5),CAST(O.DELIVERBY as Time)) AS DeliveryTime,PCITY,PICKUP,DROPOFF,O.PICTURECOUNT
--INTO @temp
from Orde_ O
WHERE '
IF (@QUERY <>'')
SET @QUERY = @QUERY + ' CANCELLED = 0 '
ELSE
SET @QUERY = @QUERY + ' AND CANCELLED = 0 '
IF (@QUERY2 ='')
SET @QUERY = @QUERY + ' CLIENTID IN (' + @ClientId +')'
ELSE
SET @QUERY = @QUERY + ' AND CLIENTID IN (' + @ClientId +')'
--if( @orderNumber <>'')
-- SET @QUERY2 = @QUERY + ' AND ORDERNUM = '''+ @orderNumber+''
IF (@ref <> '')
BEGIN
IF @QUERY2 = ''
SET @QUERY = @QUERY + ' REF Like %'''+ @ref + '%'''
ELSE
SET @QUERY = @QUERY + ' AND REF Like %'''+ @ref+ '%'''
END
-- AND ((READYDATE BETWEEN '''+ CONVERT(VARCHAR(10), @OrderstartDate,101)+''' AND '''+ CONVERT(VARCHAR(10),@OrderEndDate,101)+''') OR ( '+ CONVERT(VARCHAR(10), @OrderstartDate,101)+' IS NULL OR READYDATE >= '''+ CONVERT(VARCHAR(10),@OrderstartDate,101)+''' )
-- AND ('''+ CONVERT(VARCHAR(10), @OrderEndDate,101)+''' IS NULL OR READYDATE <= '''+CONVERT(VARCHAR(10),@OrderEndDate,101)+'''))) '
SET @QUERY = @QUERY + '
SELECT @RecordCount= COUNT(1) FROM @temp
SELECT * FROM @temp
WHERE RowNumber BETWEEN ( '+ CONVERT(VARCHAR(20), @PageIndex) +' -1) * '+ CONVERT(VARCHAR(20),@PageSize) +' + 1 AND((( '+ CONVERT(VARCHAR(10),@PageIndex)+' -1) * '+ CONVERT(VARCHAR(10),@PageSize)+' + 1) + '+ CONVERT(VARCHAR(10),@PageSize)+') - 1 '
PRINT @QUERY
--exec (@QUERY)
-- Execute sp_Executesql @Query , @PageIndex,@PageSize,@OrderstartDate,@OrderEndDate,@ClientId, @RecordCount OUTPUT
-- DROP TABLE #Results
END
【问题讨论】:
-
你为什么要注入你的参数? 始终为您的查询提供参数,并且包括您的动态语句。 Dos and Don'ts of Dynamic SQL
-
另外,“但我无法从 SP 下方获取 OUTPUT 值” 是什么意思?您是指数据集还是变量?您必须使用
OUTPUT参数来获取标量值。 -
@Larnu ` @RecordCount INT OUTPUT ` 我使用过,我想要其中的值是总记录数
标签: sql sql-server tsql sql-server-2008-r2