具有多个条件的SQL Update

时间:2015-06-01 11:53:36

标签: sql sql-server sql-update

我需要做的是将一行中的ValueRegisteryItemID更新为1802

如果字段ValueRegisteryItemID都包含值1790,则字段应该更改,此外,另一个名为PhaseID的字段必须具有值{{ 1}}在其中。

这是我到目前为止所写的查询:

3018

无论如何要改变它以更有效的方式,以便我不必像我知道的那样进行物理输入吗?

3 个答案:

答案 0 :(得分:2)

您的问题有点模糊,但是,如果我正确理解了您要尝试的问题,请创建一个stored procedure,这样您就不必输入/硬编码值每次你想使用这段代码。

在上面的链接中,详细解释了所有内容。就在不久你创建它的方式如下:

create procedure Something.YournameOfProcedure 
        @value1 nvarchar(50), 
        @value2 nvarchar(50) 
        @value3 nvarchar(50)  
as

update [dbo].[ImproofPhaseItems] set Value = @value1,
      RegistryItemID = @value1 where Value = @value2 and
      RegistryItemID = @value2 and
      PhaseID = '@value3; 

你运行它的方式:

execute Something.YournameOfProcedure  N'1801', N'1302', '1321';

然后,根据调用该特定查询的原因,您可以从.NET代码中调用它。 如果不是这种情况,并且例如值是从另一个地方导出的,则可以使用csv文件或xml,然后直接从sql代码中解析它。

答案 1 :(得分:0)

如果你不想像Bojan建议的那样使用存储过程,你可以在下面使用,但是由于你需要在每次更新后提供新的变量值,所以工作要多得多。我建议使用过程,如果已经应用所有更新,则甚至删除过程:

DECLARE @NewValue nvarchar(10) 
DECLARE @PhaseID nvarchar(10) 
DECLARE @OldValue nvarchar(10) 

SET @NewValue = '1802'
SET @PhaseID = '3018'
SET @OldValue = '1790'

UPDATE [dbo].[ImproofPhaseItems]
SET Value = @NewValue,
    RegistryItemID = @NewValue
WHERE Value = @OldValue and
      RegistryItemID = @OldValue and
      PhaseID = @PhaseID;
GO


SET @NewValue = 'another new value'
SET @PhaseID = 'another Phase'
SET @OldValue = 'another old value'

UPDATE [dbo].[ImproofPhaseItems]
SET Value = @NewValue,
    RegistryItemID = @NewValue
WHERE Value = @OldValue and
      RegistryItemID = @OldValue and
      PhaseID = @PhaseID;
GO

-- and so on

答案 2 :(得分:-1)

如果这是一个重复的任务,你需要一些东西,这样你只需要输入一次sql。一种选择是Microsoft Access。使用链接表创建一个数据库到您的Sql Server数据库。然后构建一个select查询,公开要更新的字段,并提示您输入必须提供的值。

如果您没有Access,则可以编写一个Web应用程序或控制台应用程序,提示您输入值,然后运行查询。这可以在.net,php,coldfusion,java和其他语言中完成。