2013-02-14 37 views
-2

我想創建唯一的ID。LOOP將數據插入到具有唯一ID的表中

的情況下是有表的交易,但沒有主表

例如情況是這樣

TBL_Store

StoreID StoreName EmployeeName EmployeePosition CityCode 
S001  Alfa Mart Denny  HeadStore  C001 
S002  Wart Mart Willy  Manager   C002 
S003  Hypermart Ahmad  Manager   C002 

,所以我想使tbl_Employee從tbl_Store

我這樣的代碼

declare @a int, @jml as int 
    set @a = 1 
    CREATE TABLE #Tempabc (
     EmployeeName varchar(100), EmployeeCPosition varchar(100), CityCode varchar(10) 
     ) 
    insert into #Tempabc 
    select distinct a.EmployeeName ,a.EmployeePosition ,a.CityCode from tbl_Store a where a.EmployeeName is not null 

     select @jml = count(*) from #Tempabc ac 
    while (@a <= @jml) 
    begin 
     --insert into tbl_Employee (EmployeeName , EmployeePosition ,CityCode,CreatedBy,LastEditBy,LastEditBy, LastEditDate ,EmployeeCode) 
     select distinct a.EmployeeName ,a.EmployeePosition ,a.CityCode ,'Admin','Admin', CONVERT(VARCHAR(10), 
     GETDATE(),120) AS Createdate,CONVERT(VARCHAR(10),GETDATE(),120) AS LastEditDate , 
     case when @a < 10 then 'SPC00'+ cast (@a as varchar(3)) 
      when @a < 100 then 'SPC0' + CAST(@a as varchar(3)) 
      else 'SPC' + CAST(@a as varchar(3))  
     end as abv              
     from tbl_Store a where a.EmployeeName is not null 

     set @a = @a +1 
    end 

從上面的代碼中存在做出循環這樣

EmployeeName EmployeePosition CityCode EmployeeCode 
Denny  HeadStore  C001  SPC001 
Willy  Manager   C002  SPC001 
Ahmad  Manager   C002  SPC001 
Denny  HeadStore  C001  SPC002 
Willy  Manager   C002  SPC002 
Ahmad  Manager   C002  SPC002 
Denny  HeadStore  C001  SPC003 
Willy  Manager   C002  SPC003 
Ahmad  Manager   C002  SPC003 
+0

而你的問題是? – Dukeling 2013-02-14 11:15:05

+0

如何讓我的代碼穩定? – 2013-02-14 11:18:53

+1

這不是問題。至少它與問題題目無關。 – mvp 2013-02-14 11:19:59

回答

1

您可以設置一個標識,並喜歡上您的臨時表的主鍵:

CREATE TABLE #Tempabc (
    [ID] [int] IDENTITY(1,1) NOT NULL, EmployeeName varchar(100), EmployeeCPosition varchar(100), CityCode varchar(10) 
    ) 

的ID將在每次插入遞增,然後您可以致電#Tempabc上的更新來創建員工代碼

UPDATE #Tempabv SET EmployeeCode = 'SPC' + RIGHT('0000'+CONVERT(VARCHAR(3), ID), 3) 

我在說的是插入和創建everyth先插入,然後只在最後插入Employee表。即使你需要創建另一個臨時表。確保清理這些臨時表

+0

我明白你的意思。它不正確的答案。但一個很好的邏輯。謝謝。 – 2013-02-14 12:18:16

0

感謝CR41G14的答案。

CREATE TABLE #Tempabc (
     EmployeeCode int IDENTITY(1,1) NOT NULL, EmployeeName varchar(100), EmployeeCPosition varchar(100), CityCode varchar(10) 
     ) 

insert into tbl_Employee (EmployeeName , EmployeePosition ,CityCode,CreatedBy,LastEditBy,LastEditBy, LastEditDate ,EmployeeCode) 
     select distinct a.EmployeeName ,a.EmployeePosition ,a.CityCode ,'Admin','Admin', CONVERT(VARCHAR(10), 
     GETDATE(),120) AS Createdate,CONVERT(VARCHAR(10),GETDATE(),120) AS LastEditDate , 
     case when a.EmployeeCode < 10 then 'SPC00'+ cast (a.EmployeeCode as varchar(3)) 
      when a.EmployeeCode < 100 then 'SPC0' + CAST(a.EmployeeCode as varchar(3)) 
      else 'SPC' + CAST(a.EmployeeCode as varchar(3))  
     end as abv              
     from #Tempabc a 
相關問題