将参数从一个存储过程传递到另一个

时间:2019-10-15 19:22:03

标签: sql-server tsql

我试图将参数从一个存储过程传递到另一个存储过程,并试图弄清楚如何将其放入字符串中。

我尝试过的事情:

CREATE PROCEDURE proc1
    (@ReportStartDate DATE)
AS
    SELECT * 
    FROM table1 
    WHERE fielddate = @ReportStartDate

然后我尝试了

CREATE PROCEDURE proc2
    (@ReportDate DATE)
AS
    SELECT * 
    FROM openquery(local, 'exec dbname.dbo.proc1 @ReportStartDate="' + @ReportDate + '"')

但是我得到一个错误

  

“ +”附近的语法不正确

然后我尝试了

CREATE PROCEDURE proc2
    (@ReportDate DATE,
     @strSQL NVARCHAR(60))
AS
    SET @ReportDate = (SELECT DATEADD(DAY, 7 - DATEPART(WEEKDAY, GETDATE()), CAST(GETDATE() AS DATE)))
    SET @strSQL = 'exec dbname.dbo.proc1 @ReportStartDate="' + @ReportDate + '"'

    SELECT * 
    FROM openquery(local, @strSQL)

并导致错误:

  

“ @ strSQL”附近的语法不正确

proc1允许我根据任何日期运行,但proc2允许我使用一周的最后一天以及其他一些东西。我没有包括“其他内容”,因为我试图弄清楚如何传递新参数。

1 个答案:

答案 0 :(得分:0)

尝试在INSERT EXEC中使用proc2而不是OPENQUERY

CREATE proc2
(
    @ReportDate DATE
)
AS
BEGIN

DECLARE @t TABLE (Col1 INT);
INSERT @t (Col1)
EXEC proc1 @ReportStartDate = @ReportDate;

SELECT Col1 FROM @t;
END;

请注意,我正在为@t使用组合模式。您将需要在@t的查询中创建与table1相似或相同的架构proc