存储过程中的存储过程参数

时间:2015-06-23 21:10:31

标签: sql-server stored-procedures

下面我有一个我正在处理的查询,它将创建一个存储过程。

USE [PERFORMANCE]
GO

/****** Object:  StoredProcedure [dbo].[proc_performance_employee_manager_relation]    ******/

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


CREATE PROCEDURE [dbo].[proc_performance_employee_manager_relation] 
-- Add the parameters for the stored procedure here
    @beginDate datetime,
    @endDate datetime

AS
BEGIN

DECLARE @PERFORMANCE TABLE 
(
AGT_RESPONSIBLE INT,
EMPLOYEE_LAST_NAME VARCHAR(50),
EMPLOYEE_FIRST_NAME VARCHAR(50),
#_OF_COMPLIMENTS INT,
DEBIT_COUNT INT,
DEBIT_POTENTIAL_AMOUNT INT,
DEBIT_TNT_AMT INT,
#_OF_VALUE_ADDS INT,
DOLLAR_AMT_OF_VALUE_ADDS INT
)

INSERT INTO @PERFORMANCE
Exec proc_performance_AGT_roi '2015-05-01','2015-05-30'

SELECT
P.AGT_RESPONSIBLE, 
P.EMPLOYEE_LAST_NAME ,
P.EMPLOYEE_FIRST_NAME ,
P.#_OF_COMPLIMENTS ,
P.DEBIT_COUNT ,
P.DEBIT_POTENTIAL_AMOUNT ,
P.DEBIT_TNT_AMT ,
P.#_OF_VALUE_ADDS, 
P.DOLLAR_AMT_OF_VALUE_ADDS,
AGENT.EMPLOYEE_ID,
AGENT.FIRST_NAME,
AGENT.LAST_NAME,
AGENT.INTERNAL_TITLE,
AGENT.BRANCH_CODE,
AGENT.LOCATION,
MANAGER.EMPLOYEE_ID,
MANAGER.FIRST_NAME,
MANAGER.LAST_NAME,
MANAGER.INTERNAL_TITLE,
MANAGER.BRANCH_CODE,
MANAGER.LOCATION


FROM 
@PERFORMANCE P
LEFT JOIN omadb08.TANDT_EMPLOYEE.dbo.ADP_EMPLOYEE AGENT
    LEFT JOIN omadb08.TANDT_EMPLOYEE.dbo.ADP_EMPLOYEE MANAGER
    ON AGENT.REPORTS_TO_EMPLOYEE_ID = MANAGER.EMPLOYEE_ID
ON P.AGT_RESPONSIBLE = AGENT.EMPLOYEE_ID


END


GO

代码工作正常,但我主要关心的是我有参数的代码:

INSERT INTO @PERFORMANCE
Exec proc_performance_AGT_roi '2015-05-01','2015-05-30'

以上是另一个程序的插入。我担心的是,如果我在一个月内运行它,它将使用这些日期作为参数而不是我想要的日期。那么有没有一种方法,如果我将参数放在整个过程中,它可以将我输入的内容复制到该exec语句中,这样程序就可以工作,还是只是幻想?

2 个答案:

答案 0 :(得分:3)

我不确定这是否能回答你的问题。如果你问的是 - 你可以使用存储过程的输入参数作为另一个的输入参数,那么是的,你可以。

CREATE PROCEDURE [dbo].[proc_performance_employee_manager_relation] 
-- Add the parameters for the stored procedure here
    @beginDate datetime,
    @endDate datetime
AS
BEGIN
   ...
    INSERT INTO @PERFORMANCE
    Exec proc_performance_AGT_roi @beginDate ,@endDate 
   ...
END

存储过程proc_performance_employee_manager_relation可以使用您想要的任何参数在别处执行。

DECLARE @StartDate DATETIME
DECLARE @StartDate DATETIME

SET @StartDate='01/01/2015'
SET @EndDate='06/01/205'

EXEC proc_performance_employee_manager_relation @StartDate, @EndDate

此外,配置服务器的区域设置可能与您用于输入日期的方式不同。查看this页面上的一些示例。您可以使用以下功能强制进行特定转换:

-- SQL convert date string to datetime - time set to 00:00:00.000 or 12:00AM    
PRINT CONVERT(datetime,'07-10-2012',110)        -- Jul 10 2012 12:00AM    
PRINT CONVERT(datetime,'2012/07/10',111)        -- Jul 10 2012 12:00AM
PRINT CONVERT(datetime,'20120710',  112)        -- Jul 10 2012 12:00AM   

答案 1 :(得分:1)

您需要参数。这是一个带有in参数的存储过程:

CREATE PROCEDURE uspGetAddress @City nvarchar(30)
AS
SELECT * 
FROM AdventureWorks.Person.Address
WHERE City = @City
GO

这就是你怎么称呼它:

EXEC uspGetAddress @City = 'New York'

您只需要在参数中修改存储过程,并在调用时使用必要的参数调用它。