我有下表:
CREATE TABLE [dbo].[Test] (
[TestId] INT IDENTITY (1, 1) NOT NULL,
[TestTypeID] INT NOT NULL,
[ExamId] INT NOT NULL,
[TestStatusId] INT NOT NULL,
[TopicId] INT NOT NULL
);
我正在使用我创建的用于插入数据的存储过程:
CREATE PROCEDURE dbo.sp_ins_test
@ExamId INT ,
@TestStatusId INT ,
@TestTypeId INT ,
@TopicId INT
AS
BEGIN
如何根据@TestTypeId的值进行不同的操作?
我想要做的是,如果TestTypeId = 1,那么我想更新所有具有TopicId = @TopicId的测试记录,并将TestStatusId更改为2.
如果TestTypeId = 2,那么我想更新所有具有ExamId = @ExamId的测试记录,并将TestStatusId更改为2.
这是我到目前为止所做的:
UPDATE dbo.Test
SET TestStatusId = 2
WHERE TestTypeId = @TestTypeId
AND Title = @Title;
UPDATE dbo.Test
SET TestStatusId = 2
WHERE ExamId = @ExamId
AND Title = @Title;
但是我不知道如何根据TestTypeId的值选择一个或其他更新。
答案 0 :(得分:2)
CREATE PROCEDURE dbo.sp_ins_test
@ExamId INT ,
@TestStatusId INT ,
@TestTypeId INT ,
@TopicId INT
AS
BEGIN
IF @TestTypeID = 1
BEGIN
UPDATE dbo.Test
SET TestStatusId = 2
WHERE TestTypeId = @TestTypeId
AND Title = @Title;
END
IF @TestTypeId = 2
BEGIN
UPDATE dbo.Test
SET TestStatusId = 2
WHERE ExamId = @ExamId
AND Title = @Title;
END
END
答案 1 :(得分:1)
您可以在SQL中进行分支,并使用IF
和ELSE IF
块,但在基于集合的逻辑而不是过程逻辑中进行思考是一个很好的练习。
您可以使用更多WHERE
语句来实现此目的。
update [Test]
set TestStatusId = 2
where TopicId = @TopicId
and TestTypeID = 1
update [Test]
set TestStatusId = 2
where ExamId = @ExamId
and TestTypeID = 2
你的问题并不完全清楚
我想要做的是,如果TestTypeId = 1,那么我想更新 所有具有TopicId = @TopicId的测试记录并更改 TestStatusId为2。
您是指代TestTypeId列还是@TestTypeId参数,但是您省略了@
所以我假设您的意思是列。