首页 新闻 搜索 专区 学院

sqlserver 两张表如何共用一个自增列

0
悬赏园豆:10 [已解决问题] 解决于 2015-10-26 09:20

sql :  SELECT *,1 AS Config,Row_Number() over ( order by getdate() ) as ID FROM mtlevel1
UNION ALL
SELECT *,2 AS Config,Row_Number() over ( order by getdate() ) as ID FROM mtlevel2

这样写好像不行

结果:

 ID   name

 1      xxx

 2     xxxx

 3     x xxxx

 1     dsad

 2     ffff

 3     klkl

完全分开了, 不是我想要的结果。

我想要的结果:

 1      xxx

 2     xxxx

 3     x xxxx

 4     dsad

 5     ffff

 6     klkl

有什么方法吗?求帮助。 这个合并的两个视图。

狗霸人间的主页 狗霸人间 | 初学一级 | 园豆:4
提问于:2015-10-23 19:02
< >
分享
最佳答案
0

收获园豆:10
Firen | 大侠五级 |园豆:5483 | 2015-10-23 21:18
其他回答(3)
1

楼主是想用Config来标记究竟是哪个表?按照楼主思路:

WITH tbl AS (

SELECT 1 AS Config,* FROM mtlevel1

UNION ALL

SELECT 2 AS Config,* FROM mtlevel2

)

SELECT ROW_NUMBER() OVER(ORDER BY GETDATE()),* FROM tbl

小白菜T | 园豆:564 (小虾三级) | 2015-10-24 09:16

对的。谢谢你的回答

支持(0) 反对(0) 狗霸人间 | 园豆:4 (初学一级) | 2015-10-26 09:28
0

USE YTGS;
GO
IF OBJECT_ID ( 'YTGS.YTGS.getSequence', 'P' ) IS NOT NULL
    DROP PROCEDURE YTGS.getSequence;
GO
CREATE PROCEDURE YTGS.getSequence(@maxCount int)
AS
    declare @maxValue int;
    SELECT @maxValue=MAX(sequence)
    FROM YTGS.YTGS.sequencetable;
    if @maxValue is null
      set @maxValue=0;
    else if  @maxValue>@maxCount
    begin
    delete  YTGS.YTGS.sequencetable;
    set @maxValue=0;
    end;
    set @maxValue=@maxValue+1;
    insert into YTGS.YTGS.sequencetable (sequence) values(@maxValue)
GO
declare @v int;
exec YTGS.getSequence 1000;
 SELECT MAX(sequence)
    FROM YTGS.YTGS.sequencetable;

 

实现后跟ORACLE里面的序列的概念是差不多的。

参考:http://download.csdn.net/detail/mzg29/4544724#comment

LI.TS | 园豆:222 (菜鸟二级) | 2015-10-25 00:05
0

如果只是视图中区别两个表,ID前不同表加不同前缀就行,比如表1 s+ID 表2 d+ID

物理存储上要ID是一个自增序列的话,用种子表吧

victor.x.qu | 园豆:20 (初学一级) | 2015-10-25 08:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册