存储过程中的Stored Procedure参数
Stored Procedure parameter in a stored procedure
下面是我正在处理的查询,它将创建一个存储过程。
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 语句中,这样该过程就会起作用,或者这只是一个幻想?
我不确定这是否回答了您的问题。如果您要问的是 - 您能否将存储过程的输入参数用作另一个存储过程的输入参数,那么可以。
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
您需要输入参数。这是一个带有 in 参数的存储过程:
CREATE PROCEDURE uspGetAddress @City nvarchar(30)
AS
SELECT *
FROM AdventureWorks.Person.Address
WHERE City = @City
GO
你是这样称呼它的:
EXEC uspGetAddress @City = 'New York'
您只需要修改您的存储过程以期望输入参数,并在调用时使用必要的参数调用它。
下面是我正在处理的查询,它将创建一个存储过程。
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 语句中,这样该过程就会起作用,或者这只是一个幻想?
我不确定这是否回答了您的问题。如果您要问的是 - 您能否将存储过程的输入参数用作另一个存储过程的输入参数,那么可以。
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
您需要输入参数。这是一个带有 in 参数的存储过程:
CREATE PROCEDURE uspGetAddress @City nvarchar(30)
AS
SELECT *
FROM AdventureWorks.Person.Address
WHERE City = @City
GO
你是这样称呼它的:
EXEC uspGetAddress @City = 'New York'
您只需要修改您的存储过程以期望输入参数,并在调用时使用必要的参数调用它。