Sql server 如何插入参数和声明存储过程

Sql server 如何插入参数和声明存储过程,sql-server,Sql Server,我正试图编写一个存储过程来获取usersID和Month这两个参数 现在我有了这个,但我想把它们放到变量中,比如参数。我怎么做 ALTER PROCEDURE [dbo].[SP_TaskObjDashboard] AS BEGIN DECLARE @UserID INT = 20 DECLARE @Dateinput DATETIME SELECT COALESCE(@UserID, users.UserID) AS TC,

我正试图编写一个存储过程来获取usersID和Month这两个参数

现在我有了这个,但我想把它们放到变量中,比如参数。我怎么做

ALTER PROCEDURE [dbo].[SP_TaskObjDashboard]
AS
BEGIN  
    DECLARE @UserID INT = 20 
    DECLARE @Dateinput DATETIME

    SELECT 
        COALESCE(@UserID, users.UserID) AS TC, 
        Objtask.Pace, Objtask.Month, salesobj.SalesObjectiveMonth
    FROM 
        TBL_User AS users
    JOIN 
        TBL_Objectives_Task AS Objtask ON users.UserID = Objtask.Consultant
    LEFT JOIN 
        TBL_SalesObjective AS salesobj ON users.UserID = salesobj.UserID
    WHERE 
        users.IsActive = 1  
        AND MONTH('2019-08-25') = MONTH(Objtask.Month) 
        AND users.UserID = COALESCE(@UserID, users.UserID)
END
这应该做到:

ALTER PROCEDURE [dbo].[SP_TaskObjDashboard]
  @UserID INT, @Dateinput datetime
AS
...
另外,不要忘记删除将变量更改为参数的DECLARE语句


我想……你的错误是

1。“无法为局部变量指定默认值。”

2。必须声明标量变量“@UserID”。

Sol:-

ALTER PROCEDURE [dbo].[SP_TaskObjDashboard]
AS
BEGIN  
    DECLARE @UserID INT
    SET @UserID=20

    DECLARE @Dateinput DATETIME

    SELECT 
        COALESCE(@UserID, users.UserID) AS TC, 
        Objtask.Pace, Objtask.Month, salesobj.SalesObjectiveMonth
    FROM 
        TBL_User AS users
    JOIN 
        TBL_Objectives_Task AS Objtask ON users.UserID = Objtask.Consultant
    LEFT JOIN 
        TBL_SalesObjective AS salesobj ON users.UserID = salesobj.UserID
    WHERE 
        users.IsActive = 1  
        AND MONTH('2019-08-25') = MONTH(Objtask.Month) 
        AND users.UserID = COALESCE(@UserID, users.UserID)
END
有关详细信息…此类型的错误..您可以单击此链接


您的程序定义应该是

ALTER PROCEDURE [dbo].[SP_TaskObjDashboard]
  @UserID INT, @Dateinput datetime
AS
如果您不确定某个东西的语法是什么,那么文档应该是您的第一个调用端口之一。SQL Server的文档非常完整,并且有一个用户社区来帮助维护和更新它。文章中也经常包含一些示例,使事情更容易理解。旁注:您不应该在存储过程中使用
sp_
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!