小编Aar*_*iec的帖子

带有可选参数的SQL Server存储过程会更新错误的列

我有一个(遗留的)VB6程序,需要一些工作.我有一个更新供应商表的存储过程.在这种特殊的形式中,我不需要更新整行,只需要20个左右的10列.

这是一些伪代码,如果我想更新整行,它可以正常工作:

CREATE PROCEDURE [dbo].[spUpdateVendor](
    @pID INT,
    @pVendorID varchar(254), 
    @pVendorName varchar(255),
    @pContact varchar(255),
    @pEmail varchar(255),
    ...)
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON

DECLARE @ErrorMessage nvarchar(4000);

BEGIN TRY
-- Start the transaction
    BEGIN TRANSACTION
        UPDATE tblVendor
            SET
                [Vendor ID] = @pVendorID,
                [Vendor Name] = @pVendorName,
                [Contact] = @pContact,
                [email] = @pEmail
                ...
            WHERE
                [ID] = @pID
    COMMIT TRANSACTION;
END TRY
Run Code Online (Sandbox Code Playgroud)

如果我只想更新一些带有数据的列,那么就是我尝试过的(伪)代码(尝试使用可选参数):

CREATE PROCEDURE [dbo].[spUpdateVendor2](
    @pID INT,
    @pVendorID varchar(254) = NULL, 
    @pVendorName varchar(255) = NULL,
    @pContact varchar(255) = NULL,
    @pEmail …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server stored-procedures optional-parameters

5
推荐指数
1
解决办法
2万
查看次数