【问题标题】:Passing parameter variable in exec() function in procedure在过程中的 exec() 函数中传递参数变量
【发布时间】:2016-04-25 23:06:12
【问题描述】:

我正在尝试在我的过程中使用参数变量exec()

程序如下:

CREATE PROCEDURE [dbo].[sp_CostBudgetedTabular](@start  AS datetime)
AS
BEGIN
    Exec('Declare @tempActual Table(MonthName nvarchar(MAX),Total float);
    Declare @tempBudgeted Table(MonthName nvarchar(MAX),Total float);

    insert into @tempBudgeted sp_CostBudgetedTabular @start
    insert into @tempActual sp_CostActualTabular @start  ')

它正在抛出错误:

消息 102,第 15 级,状态 1,第 20 行
“sp_CostBudgetedTabular”附近的语法不正确。

消息 102,第 15 级,状态 1,第 21 行
“sp_CostActualTabular”附近的语法不正确。

sp_CostBudgetedTabularsp_CostActualTabular 是以日期为参数的过程

【问题讨论】:

  • 旁注:CREATE PROCEDURE:“在命名过程时避免使用 sp_ 前缀。SQL Server 使用此前缀来指定系统过程”
  • 另外,你为什么要在一个完全静态的字符串上使用EXEC?为什么不直接在此过程中使用代码?
  • @Damien_The_Unbeliever 感谢您的建议,下次创建程序时我会牢记这一点。你能帮我解决我目前遇到的问题吗?

标签: sql-server stored-procedures


【解决方案1】:
CREATE PROCEDURE [dbo].[sp_CostBudgetedTabular]
(
    @start DATETIME
)
AS BEGIN

    SET NOCOUNT ON

    DECLARE @SQL NVARCHAR(MAX)
    SET @SQL = '
    DECLARE @tempActual TABLE ([MonthName] NVARCHAR(100), Total FLOAT)
    DECLARE @tempBudgeted TABLE ([MonthName] NVARCHAR(100), Total FLOAT)

    INSERT INTO @tempBudgeted
    EXEC dbo.sp_CostBudgetedTabular @start

    INSERT INTO @tempActual
    EXEC dbo.sp_CostActualTabular @start  '

    EXEC sys.sp_executesql @SQL, N'@start DATETIME', @start = @start

END

【讨论】:

    猜你喜欢
    • 2012-04-12
    • 2020-10-21
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多