在SQL Server中增加id值

时间:2015-08-26 05:59:32

标签: sql sql-server tsql

在我的SQL中,我有这个查询,我想用这个带

的插件增加id

我不想使用identity(1,1)

INSERT INTO dbo.tbl_waredetails
       (wd_id, wd_mt_code, wd_wa_Id, wd_supply, wd_description, wd_status)
   SELECT    
       (SELECT ISNULL(MAX(wd.wd_id), 0) + 1 
        FROM dbo.tbl_waredetails AS wd), 
       dbo.tbl_material.mat_code, @id,
       dbo.fun_CompRem(mat_code, -1, @user_id) AS supply,
       NULL, 0
   FROM                 
       tbl_material 
   INNER JOIN
       dbo.tbl_MatUnit ON dbo.tbl_material.mat_MatUnt_Code = dbo.tbl_MatUnit.Matunt_code 
   INNER JOIN
       dbo.tbl_MatGroup ON dbo.tbl_material.mat_MatGrp_Code = dbo.tbl_MatGroup.MatGrp_Code

但它总是发送2作为id

2 个答案:

答案 0 :(得分:1)

尝试以下查询

INSERT INTO dbo.tbl_waredetails
        (wd_id, wd_mt_code, wd_wa_Id, wd_supply, wd_description, wd_status)
   SELECT    
       (SELECT ISNULL(MAX(wd.wd_id), 0)  
        FROM dbo.tbl_waredetails AS wd)+ (row_number() over (order by wd.wd_id)), 
       dbo.tbl_material.mat_code, @id,    
       dbo.fun_CompRem(mat_code, -1, @user_id) AS supply,
       NULL, 0
   FROM                 
       tbl_material 
   INNER JOIN
       dbo.tbl_MatUnit ON dbo.tbl_material.mat_MatUnt_Code = dbo.tbl_MatUnit.Matunt_code 
   INNER JOIN
       dbo.tbl_MatGroup ON dbo.tbl_material.mat_MatGrp_Code = dbo.tbl_MatGroup.MatGrp_Code

答案 1 :(得分:0)

with cte as
(select (SELECT isnull(MAX(wd.wd_id),0) FROM dbo.tbl_waredetails ) as iden,dbo.tbl_material.mat_code,@id,    


            dbo.fun_CompRem(mat_code,-1,@user_id
            )as supply,NULL,0
            FROM     tbl_material INNER JOIN
                                  dbo.tbl_MatUnit ON dbo.tbl_material.mat_MatUnt_Code = dbo.tbl_MatUnit.Matunt_code INNER JOIN
                                  dbo.tbl_MatGroup ON dbo.tbl_material.mat_MatGrp_Code = dbo.tbl_MatGroup.MatGrp_Code
where ROW_NUMBER ( ) 
    OVER ( order by 1 )=1

union all

select c.iden+1,dbo.tbl_material.mat_code,@id,    


            dbo.fun_CompRem(mat_code,-1,@user_id
            )as supply,NULL,0
            FROM     tbl_material INNER JOIN
                                  dbo.tbl_MatUnit ON dbo.tbl_material.mat_MatUnt_Code = dbo.tbl_MatUnit.Matunt_code INNER JOIN
                                  dbo.tbl_MatGroup ON dbo.tbl_material.mat_MatGrp_Code = dbo.tbl_MatGroup.MatGrp_Code
join cte as d on 1=1
where ROW_NUMBER ( ) 
    OVER ( order by 1 )!=1

)




INSERT INTO dbo.tbl_waredetails
        ( 
            wd_id,
          wd_mt_code ,
          wd_wa_Id ,
          wd_supply ,
          wd_description ,
          wd_status
        )

    SELECT    iden, dbo.tbl_material.mat_code,@id,supply,NULL,0
            FROM                CTE