2017-08-11 28 views
-1

我在SQL服务器中有一个包含多列的表。名为usertxt1的列是NULL。我想根据表中的ID列在此列中插入NEWID()。SQL - 使用存储过程/临时表在表中的现有列中插入GUID

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。这是我工作的测试数据库。我的问题是:如何将这些usertxt10值插入到完全相同的表中的prod数据库中?此外,如何确保在表中创建新行时创建NEWID()?从朋友告诉我某种临时表存储过程应该做到这一点,但我一直无法使它工作。

+1

你的要求不明确。您需要提供现有的表格定义。你需要清楚地描述你的要求; “基于另一个ID列在此列中插入NEWID()” - 太含糊。请阅读:https://stackoverflow.com/help/how-to-ask和https://stackoverflow.com/help/mcve。还请告诉你已经尝试过,因为这不是免费的代码写入服务。 – Alex

+0

对帖子进行了更改。 –

+0

什么是NEWID(),这是一个函数,它返回特定行中该列的新ID ID? –

回答

0

你可以写你的SP为:

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

UPDATE [YouTable] 
SET  usertxt1 = NEWID() 
WHERE Id = @id 
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<[email protected]) 
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 [email protected] 
set @count+=1 
END 

    select * from @table 
+0

谢谢,但我已经解释了一些问题,不确定这个解决方案是否正确。尽管如此,我仍然会给它一个机会。 –

相关问题