0

この質問があります。これにより、元のフィールド「オハイオ」で元の値が更新されるのはなぜですか... proc「オハイオ OH」の後、更新された値のみが必要です。 procで使用する前にテストした1つの値。調べてくれてありがとう。

CREATE PROC [dbo].[Changestringstate] 
AS 
    UPDATE stage.statetable 
    SET    originalstatename = Rtrim(originalstatename) --avoiding trailing space issues 

    UPDATE stage.statetable 
    SET    originalstatename = Replace(originalstatename, 
                               Substring (originalstatename, 
                               Len (originalstatename) - ( 
                               Charindex(' ', Reverse( 
                               originalstatename)) ) + 1, Len(originalstatename) 
                               ), 
           dbo.Changefunction(originalstatename)) 
4

1 に答える 1

0

この例を考えてみましょう

create table statetable
(
  originalstatename varchar(100)
);
insert statetable values ('ohio oh');
GO

CREATE PROC [dbo].[Changestringstate] 
AS 
    UPDATE statetable 
    SET    originalstatename = Rtrim(originalstatename) --avoiding trailing space issues 

    UPDATE statetable 
    SET    originalstatename = Replace(originalstatename, 
                               Substring (originalstatename, 
                               Len (originalstatename) - ( 
                               Charindex(' ', Reverse( 
                               originalstatename)) ) + 1, Len(originalstatename) 
                               ), 
           'ohia') 
GO
exec changestringstate;
select * from statetable;

--- result
ohioohia

あなたのprocがしていること:

SUBSTRING ブロック全体は、LAST SPACE の後のすべてを削除するという 1 つのことを行います。後続のスペースは以前の UPDATE で削除されているため、これは除外されています。それが何をするかの例:

state name    |  Substring result
Ohio OH          " OH"
Mi Ohio OH       " OH"
New York NY      " NY"

次に REPLACE ブロックが来ます。これは を探し、出現するすべてのものを から返されたものに置き換えsubstring resultます。「xyz」で戻ってくるとしましょう。dbo.Changefunction()

state name    |  Substring result | after replace
Ohio OH          " OH"            | Ohioxyz
Mi Ohio OH       " OH"            | Mixyzioxyz
New York NY      " NY"            | New Yorkxyz

proc を理解するのに役立ち、それに応じて修正できることを願っています。

于 2012-10-06T04:11:15.880 に答える