SQL Server更新列值的过程

时间:2014-05-08 01:36:09

标签: sql sql-server sql-server-2008

你好我是新手在SQL Server中编写程序。

我正在尝试编写一个程序来做这样的事情

LOGIC

If ( Table1. ColA.Value = Table2. colB.Value)
then
Table1.ColC.Value  = Table1. ColA.Value

(If Col A value of Table 1 = Col B value of Table 2)

THEN Update the value of Table1.ColC as the same value of Table1.ColA


CREATE PROCEDURE dbo.stored1

AS
BEGIN

DECLARE @Var1 AS nvarchar(50)
DECLARE @Var2 AS nvarchar(50)

SELECT @Var1 = Test.dbo.Unit.HMY
FROM Test.dbo.Unit

SELECT @Var2 = Test.dbo.UnitTypeExtract.HPROPERTY
FROM Test.dbo.UnitTypeExtract

SELECT CASE WHEN @Var1 = @Var2

THEN

UPDATE Test.dbo.Unit.UnitType = @Var1

END

该过程运行良好但没有行受到影响。我确定数据,因为我将其与相似性进行了比较。

3 个答案:

答案 0 :(得分:1)

SQL比你在问题中尝试使用它更具说明性。一般来说,你告诉它是什么产生而不是如何产生它。你在CREATE PROCEDURE篇章之前的第一个例子让我更容易理解,这就是我如何理解它:

UPDATE Table1
    SET Table1.ColC = Table1.ColA
FROM
    Table1
    INNER JOIN
    Table2
    ON
        Table1.ColA = Table2.ColB;

我还要评论上述用法对我来说似乎有些偏差。造成这种情况的原因是我没有看到合理的需要将表中的更新更新为同一个表/同一行中的另一个值。仔细检查您的逻辑与业务需求相比,因为它似乎对我而言。

答案 1 :(得分:0)

将您的更新和选择案例更改为:

IF @Var1 = @Var2 BEGIN

   UPDATE Test.dbo.Unit
   SET UnitType = @Var1

END

但请注意。这样您将更新所有行。这真的是你想要的吗?

答案 2 :(得分:0)

您的以下代码

SELECT CASE WHEN @Var1 = @Var2

THEN

UPDATE Test.dbo.Unit.UnitType = @Var1 <-- here missing set operator

可以直接简化为

UPDATE Test.dbo.Unit set UnitType = @Var1 where @Var1 = @Var2