下面我有一个我正在处理的查询,它将创建一个存储过程。
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语句中,这样程序就可以工作,还是只是幻想?
答案 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'
您只需要在参数中修改存储过程,并在调用时使用必要的参数调用它。