假设我有两个桌子。 第一张桌子就是这样
ID Code
NULL 106164029
NULL 106100797
NULL 106100793
NULL 106301098
NULL 106010735
NULL 206010989
NULL 206010956
现在第二张桌子是这样的...
ID Code
1 102323223
2 105454545
3 106232244
4 106432432
5 106043222
6 206122222
7 211111116
在将它们合并在一起后,如何使表生成下一个ID(主键)值,使表看起来像这样?
ID Code
1 102323223
2 105454545
3 106232244
4 106432432
5 106043222
6 206122222
7 211111116
8 106164029
9 106100797
10 106100793
11 106301098
12 106010735
13 206010989
14 206010956
答案 0 :(得分:3)
您可以为您的PK字段使用IDENTITY
属性,并且可以保留第一个表的顺序,并为第二个表赋予随机顺序。
您还可以为ID为NULL
的表指定顺序,但是您必须为conditional order by选择该顺序,因为该表没有基于您的逻辑顺序已经提供了。
create table #t1 (id int null, code bigint)
create table #t2 (id int null, code bigint)
insert into #t1
values
(NULL,106164029),
(NULL,106100797),
(NULL,106100793),
(NULL,106301098),
(NULL,106010735),
(NULL,206010989),
(NULL,206010956)
insert into #t2
values
(1,102323223),
(2,105454545),
(3,106232244),
(4,106432432),
(5,106043222),
(6,206122222),
(7,211111116)
--here is your final table with the auto calculated id primary key
create table #t3 (id int identity (1,1), code bigint)
alter table #t3 add constraint pk primary key (id)
--the order by keeps the same order as the original table with the id values
insert into #t3
select code from #t2
order by id
--since the ID is null in this table, i didn't specify an order by but you could using conditional order by
insert into #t3
select code from #t1
--see the results
select * from #t3 order by id
drop table #t1, #t2, #t3
这将返回以下内容,其中包含您对第一个表(1-7)的顺序,但对第二个表没有保证的顺序,除非您应用某种逻辑来指定该表的顺序。事实是,没有办法说出来。单个聚集索引可能会有所帮助。
+----+-----------+
| id | code |
+----+-----------+
| 1 | 102323223 |
| 2 | 105454545 |
| 3 | 106232244 |
| 4 | 106432432 |
| 5 | 106043222 |
| 6 | 206122222 |
| 7 | 211111116 |
| 8 | 106164029 |
| 9 | 106100797 |
| 10 | 106100793 |
| 11 | 106301098 |
| 12 | 106010735 |
| 13 | 206010989 |
| 14 | 206010956 |
+----+-----------+
答案 1 :(得分:0)
您有三种方法。
第一种(简单)方式:定义一个标识字段,以便在执行INSERT
语句时填充它。
第二种方式:编写INSERT语句时,可以应用逻辑来计算ID,如下所示:
INSERT INTO yourtable (id, code)
SELECT ISNULL((SELECT COUNT(*) FROM yourtable t2
WHERE t2.code < @code), 0), code
第三种方式:在UPDATE
之后应用INSERT
语句。
INSERT INTO yourtable (code) VALUES (yourcode)
,在所有INSERT语句之后,您可以编写如下:
UPDATE yourtable SET id =
ISNULL((SELECT COUNT(*) FROM yourtable t2
WHERE t2.code < yourtable.code), 0)
WHERE id IS NULL