打算按照以下过程更新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
值的样本数据,此过程将用于将数据填充到表中。
答案 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