sql-server - SQL Server 存储过程需要未提供的参数

标签 sql-server tsql stored-procedures sql-server-2012

CREATE TABLE [dbo].[review]
(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [uID] [varchar](6) NOT NULL,
    [pID] [int] NOT NULL,
    [email] [nvarchar](255) NOT NULL,
    [review] [nvarchar](3000) NULL,
    [refURL] [nvarchar](2083) NOT NULL,
    [refID] [nvarchar](100) NOT NULL,
    [cDate] [datetime] NOT NULL,

    CONSTRAINT [PK_review] 
        PRIMARY KEY CLUSTERED ([id] ASC)
                WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                      IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                      ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[review] 
    ADD CONSTRAINT [DF_review_uID] DEFAULT (LEFT(NEWID(), (6))) FOR [uID]
GO

ALTER TABLE [dbo].[review] 
    ADD CONSTRAINT [DF_review_cDate] DEFAULT (GETDATE()) FOR [cDate]
GO

我写了这个存储过程:

ALTER PROCEDURE [dbo].[spReview] 
    @id INT = 0,
    @uID VARCHAR(6),
    @pID INT = 0,
    @email NVARCHAR(255),
    @review NVARCHAR(3000),
    @refURL NVARCHAR(2083),
    @refID NVARCHAR(100),
    @cDate DATETME = NULL,
    @OPERATION NVARCHAR(50) = ''
AS
    IF @OPERATION = 'Insert'
    BEGIN
        DECLARE @inserted TABLE ([uID] VARCHAR(6));

        INSERT INTO review ([pID], [email], [review], [refURL], [refID])
        OUTPUT INSERTED.[uID] INTO @inserted
        VALUES (@pID, @email, @review, @refURL, @refID)

        SELECT *
        FROM @inserted
    END
    ELSE IF @OPERATION = 'Delete'
    BEGIN
        DELETE FROM review
        WHERE id = @id
    END
    ELSE IF @OPERATION = 'Update'
    BEGIN
        UPDATE review
        SET pID = @pID,
            email = @email,
            review = @review,
            refURL = @refURL,
            refID = @refID
        WHERE id = @id
  END

uID : left(newid(),(6)) 和 cDate : getdate() 设置默认值

DECLARE @return_value int

EXEC    @return_value = [dbo].[spReview]
        @id = N'29',
        @OPERATION = N'Delete'

SELECT  'Return Value' = @return_value

GO

执行删除查询时出现此错误:

Procedure or function 'spReview' expects parameter '@uID', which was not supplied

我试过调试,我不知道我哪里出错了。我哪里做错了?


ELSE IF @OPERATION = 'Delete'
    BEGIN
        DELETE FROM review
        WHERE id = @id
END

只是等待'@id'参数,不需要'@uID'

最佳答案

这是您的代码:

ALTER PROCEDURE [dbo].[spReview] 
    @id INT = 0,
    @uID VARCHAR(6),
    @pID INT = 0,
    @email NVARCHAR(255),
    @review NVARCHAR(3000),
    @refURL NVARCHAR(2083),
    @refID NVARCHAR(100),
    @cDate DATETME = NULL,
    @OPERATION NVARCHAR(50) = '' 

对于每个没有“=”号的参数,您需要提供一个值。在您的情况下,这意味着您至少需要提供以下参数:

    @uID VARCHAR(6),
    @email NVARCHAR(255),
    @review NVARCHAR(3000),
    @refURL NVARCHAR(2083),
    @refID NVARCHAR(100),

因此,您要么在调用过程时提供这些参数,要么重写您的过程,这样您就不需要这些参数了。

关于sql-server - SQL Server 存储过程需要未提供的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58039480/

相关文章:

sql - 哪一个性能更好: Derived Tables or Temporary Tables

sql - 如何结合存储过程和选择查询结果?

c# - Azure:表脚本不是由 sql 执行触发的

sql - delphi 中存储过程的返回值始终为空

sql - 学习 ANSI SQL 的最佳资源是什么?

SQL Server - 如何获取自己服务器的IP?

.net - 为什么 Guid.ToString() 会颠倒字节顺序?

c# - 记录大数据字段 - 更新而不获取?

asp.net - 在sql代码中添加alt+enter(excel换行)

sql - Parent 和 Child 存储在同一个表中时显示父子关系