gpt4 book ai didi

sql-server - 具有默认参数的存储过程

转载 作者:行者123 更新时间:2023-12-02 21:35:13 26 4
gpt4 key购买 nike

我正在尝试根据我使用预定义参数编写的查询创建存储过程。

当重组为创建存储过程并执行该存储过程时,它指出未提供参数。谁能告诉我为什么?

我知道我错过了一些重要的东西,但在搞乱了代码之后,我已经达到了需要专家帮助的地步。

这是我的代码(缩短):

Alter Procedure [Test]
@StartDate AS varchar(6),
@EndDate AS varchar(6)
AS
Set @StartDate = '201620' --Define start YearWeek
Set @EndDate = (SELECT CAST(DATEPART(YEAR,getdate()) AS varchar(4)) + CAST(DATEPART(WEEK,getdate())-1 AS varchar(2)))

SELECT
*
FROM
(SELECT DISTINCT
[YEAR], [WeekOfYear]
FROM
[dbo].[DimDate]
WHERE
[Year] + [WeekOfYear] BETWEEN @StartDate AND @EndDate) dimd
LEFT JOIN
[Schema].[Table1] qad ON (qad.[Year] + qad.[Week of the Year]) = (dimd.[Year] + dimd.WeekOfYear)

当我运行该过程时,我得到:

Msg 201, Level 16, State 4, Procedure test, Line 0
Procedure or function 'test' expects parameter '@StartDate', which was notsupplied.

最佳答案

I wrote with parameters that are predefined

它们不是逻辑上“预定义”的,位于代码中的某个位置。但作为 SP 的参数,它们没有默认值并且是必需的。为了避免显式传递这些参数,您必须在 SP 定义中定义默认值:

Alter Procedure [Test]
@StartDate AS varchar(6) = NULL,
@EndDate AS varchar(6) = NULL
AS
...

NULL 或空字符串或更合理的东西 - 由您决定。这并不重要,因为您将覆盖 SP 第一行中这些参数的值。

现在您可以调用它而无需传递任何参数,例如执行 dbo.TEST

关于sql-server - 具有默认参数的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38149156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com