2017-08-11 33 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

謝謝,但我已經解釋了一些問題,不確定這個解決方案是否正確。儘管如此,我仍然會給它一個機會。 –

相關問題