你好我是新手在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
该过程运行良好但没有行受到影响。我确定数据,因为我将其与相似性进行了比较。
答案 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