SQL - 使用存储过程/临时表在表中的现有列中插入GUID

时间:2017-08-11 06:28:33

标签: sql-server stored-procedures

我在SQL Server中有一个包含多列的表。名为usertxt1的列为NULL。我想根据表中的ID列在此列中插入一个NEWID()。

ID   Product   Price     Date     usertxt1
1      A        10     9/8/2017
2      A        15     9/7/2017
3      B        20     8/8/2017
4      B        25     8/9/2017
5      C        13     6/3/2017

到目前为止我能够完成的任务:我在此表中运行了更新语句以输入GUIDS。这是我正在使用的测试数据库。我的问题是:如何在完全相同的表中的prod数据库中插入这些usertxt10值?还要继续,如何在表中创建新行时确保创建NEWID()?从朋友告诉我的某种临时表存储过程应该可以解决问题,但我无法使其工作。

2 个答案:

答案 0 :(得分:0)

你可以把你的sp写成:

DECLARE @id INT
INSERT  INTO [YouTable]
        ( usertxt1 )
VALUES  ( NULL
          )
SET @id = SCOPE_IDENTITY()

UPDATE  [YouTable]
SET     usertxt1 = NEWID()
WHERE   Id = @id

答案 1 :(得分:0)

根据您的要求,这可能是您继续进行的方式之一。

IF Object_ID('tempdb..#temp_t') iS NOT NULL
drop table #temp_t
declare @table TABLE 
(
ID int,name varchar(10),
usertxt varchar(20)
)

insert into @table(ID,name) values(1,'AA')
insert into @table(ID,name) values(2,'BB')

以下逻辑可以包含在函数中

declare @rand INT,@count INT=1,@MAXCount INT=1

 select @MAXCount = count(ID) from @table
 while(@count<=@MAXCount)
 BEGIN

    select ID as iD,ROW_NUMBER() over(order by ID) as rownum INTO #temp_t 
    from @table
      update t set usertxt = 

          convert(varchar(3),t.ID)+
          CONVERT(VARCHAR(10),ROUND(CONVERT(INT,RAND()*1000),4))
          from @table t join #temp_t tt on
          tt.ID=t.ID and rownum=@count
set @count+=1
 END

  select * from @table