【问题标题】:Insert and update stored procedure with parameters and default of zero doesn't work插入和更新带有参数且默认为零的存储过程不起作用
【发布时间】:2016-08-15 09:09:33
【问题描述】:

我需要帮助来创建一个带参数的插入存储过程,如果传递该参数的值,那么它必须在数据库中插入或更新,否则它应该使用默认值为零。

我的问题是,当我使用SampleID = 0 执行下面的代码时,它可以工作......任何其他SampleID 什么都不做。

提前致谢

存储过程的执行:

SET NOCOUNT OFF
EXEC SP_Samples '0',  '3'  ,'Pink'
GO

存储过程代码:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO              

ALTER PROCEDURE [dbo].[SP_Samples]
    (@SamplesID int, 
     @SamplesCategoriesID int,
     @SamplesName nvarchar(50)
    )
AS
BEGIN
    SET NOCOUNT ON;

    IF (@SamplesID = 0)
    BEGIN
        INSERT INTO tblSamples ([SamplesName], [SamplesCategoriesID])
        VALUES (@SamplesName, @SamplesCategoriesID)
    END
    ELSE
    BEGIN
        UPDATE [tblSamples]
        SET SamplesCategoriesID = @SamplesCategoriesID,
            SamplesName = @SamplesName 
        WHERE SamplesID = @SamplesID
    END      
END

【问题讨论】:

  • 您遇到了一些问题。两个参数是 int 但您传入的是 varchar 值。调用时丢失数字参数值周围的双引号。当您传递一个非零值时,它会运行更新。我敢肯定它运行得很好。什么行为让你认为它什么也没做?你的测试用例是什么?例如,您是否有可以测试的 SamplesID=1 的现有记录?
  • 感谢尼克,删除引号起到了作用……SP 现在正在插入非零 ID 的记录。感谢编辑代码复制/粘贴
  • 我不知道它是怎么做到的......它只命中 0 值的插入代码
  • 旁注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!
  • 谢谢马克,会的。 PS-感谢代码编辑,在我的下一篇文章中注明,谢谢

标签: sql-server stored-procedures


【解决方案1】:

首先,您必须学习如何调试存储过程。
只需在您的程序中临时插入以下代码:

SELECT @SamplesID, @SamplesCategoriesID, @SamplesName;

这就是确保正确传递值的方式。

其次,对于非零情况,添加以下语句:

SELECT COUNT(*) FROM tblSamples WHERE SamplesID = @SamplesID;

该语句不应返回零。

第三,要 500% 确定你做对了,按名称传递参数,如下所示:

EXEC SP_Samples @SamplesID = 0, @SamplesCategoriesID = 3, @SamplesName = 'Pink';
GO
EXEC SP_Samples @SamplesID = 1, @SamplesCategoriesID = 4, @SamplesName = 'Blue';
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2015-12-06
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多