SQL:为每行替换列中的字符串的一部分

时间:2013-06-13 15:50:16

标签: sql-server-2008 cursor

我有一张桌子。为了论证,我称之为表格。在表中,我有三列。 列(p键,名称,ID,位置)。

   **PKey**      **Name**                         **ID**        **Location**
     1         Penn State Main - 1551             1234             01
     2         Penn State Branch - 1551           2345             02  
     3         Florida State - 1661               3456             03 
     4         Florida State Branch -1661         4567             04 

我想将短划线( - )后的值替换为ID +' - '+所有行的位置

到目前为止,我有这个:

BEGIN
declare @name1 varchar(50),@name varchar(50),@ID char(4), @location char(2)
declare @IDLocation varchar(6),@loop int

set @loop=0
set @IDLocation=''
set @name1=''

DECLARE _cursor cursor for
    select name,ID,location from Table
OPEN _cursor

FETCH _cursor 
into @name, @ID, @location

while @@FETCH_STATUS = 0
Begin
set @IDLocation = @ID+'-'+@location
if @loop !=0
Begin
    Select SUBSTRING(@name,1,CHARINDEX('-',@name)-1)
End
    set @name1= @name+'-'+ @IDLocation
    set @loop= @loop + 1

    Fetch _cursor 
    into @name, @ID, @location
End
close _cursor
deallocate _cursor
END

概要。我真的很努力。我执行此操作并且没有任何改变它仍然是您在上面看到的相同值。通过添加子字符串,我可以删除( - )之后的所有内容,然后再添加字符串。

请帮助我。它会得到赞赏。

1 个答案:

答案 0 :(得分:0)

我明白了...感谢任何试图提供帮助的人。 首先,我有一些错误。对于那些想要学习的人 由于我已经有一段时间@@ fetch,我真的不需要循环

    BEGIN
declare @subname varchar(70),@name1 varchar(50),@name varchar(50),@ID char(4), @location char(2)
declare @pkey int,@IDLocation varchar(6)

set @IDLocation=''
set @name1=''

DECLARE _cursor cursor for
    select pkey,name,ID,location from Table
OPEN _cursor

FETCH _cursor 
into @pkey, @name, @ID, @location

while @@FETCH_STATUS = 0
Begin
set @IDLocation = @ID+'-'+@location


    Select @subname= SUBSTRING(@name,1,CHARINDEX('-',@name)-1)

    set @name1= @subname+'-'+ @IDLocation

    Update Table set name=@name1
    where pkey=@pkey


    Fetch _cursor 
    into @pkey, @name, @ID, @location
End
close _cursor
deallocate _cursor
END