SQL Server:过程,为变量设置值

时间:2019-01-06 19:31:42

标签: sql sql-server tsql

打算按照以下过程更新Table6。我已经设置了变量并且可以正确解决它们,但是如何为这两种类型的变量定义值。有搜索变量和更新变量

如果单元格具有NULL值,则有条件的过程比添加变量具有的任何值,但如果它已经具有值,则保留其原始值/不覆盖它。

CREATE PROCEDURE dbo.[Learning]

   @StartDate   DATE NULL,
   @EndDate     DATE NULL,
   @Data        VARCHAR(30) NULL,

   @Cond_CID    INT NOT NULL,
   @Cond_PID    INT NOT NULL,
   @Cond_SSC    VARCHAR(3) NOT NULL

AS
BEGIN   

BEGIN
    UPDATE temp.dbo.Table6
    SET StartDate = ISNULL(StartDate,@StartDate)
        ,EndDate = ISNULL(EndDate,@EndDate)
        ,Data = ISNULL(Data,@Data)
    WHERE Table6.CID = @Cond_CID AND TABLE6.PID = @Cond_PID AND TABLE6.SSC = @Cond_SSc

表和数据插入

CREATE TABLE temp.dbo.Table6
(
     CID INT NOT NULL,
     PID INT NOT NULL,
     SSC VARCHAR(3) NULL,
     StartDate DATE NULL,
     EndDate DATE NULL, 
     Data VARCHAR(30) NULL
     )

INSERT INTO temp.dbo.Table6
VALUES
(1001,  1333,'OP',  GETDATE(),  GETDATE(), 'OP2001156519952012'),
(1002,  1245,'OR',  GETDATE(),  NULL,      'OR20121005'),
(1003,  1116,'OP',  GETDATE(),  NULL,      'OP20131215'),
(1004,  1234,'OP',  GETDATE(),  GETDATE(), 'OP2001156519952012')

SELECT * FROM temp.dbo.Table6

具有null值的样本数据,此过程将用于将数据填充到表中。

enter image description here

1 个答案:

答案 0 :(得分:2)

您似乎想阻止(3)个搜索参数为NULL,但是当您将这些参数设置为NOT NULL时,SQL Server会抱怨并抛出

  

消息11555 15级状态1线7

     

参数'ParameterName'已声明为NOT NULL。除了内联表值函数之外,本机编译模块仅支持NOT NULL参数。

此外,我认为您的前3个参数也不应该是NULL,因为如果您传递NULL,则UPDATE将不会执行任何操作,只需将列设置为{{1} }。

您可以检查NULL正文中的NULL,如果其中一个SP则报错

IS NULL

Creating Natively Compiled Stored Procedures