搞定了100分!两个问题! sqlserver

来源:百度知道 编辑:UC知道 时间:2024/06/04 08:43:18
大家都知道!右键新建表,在设计表的视图中可以设置多个字段!

但是我想如何通过t-sql来创建多个主键!

我已经测试过了!

create table test
(
id int primary key ,
id2 int primary key,
)

消息 8110,级别 16,状态 0,第 2 行
无法将多个 PRIMARY KEY 约束添加到表 'test'。

另外一个:
昨天一个网友搞了一个问题!

表如下:
ID_data1_data2
1___1_____a
2___2_____b
3___2_____b
4___3_____c
5___3_____c
6___4_____d
想去掉那些重复的data1与data2项,得到如下结果:
1___1___a
2___2___b
4___3___c
6___4___d

最后我通过:
select min (id) as id,data1,data2 from biao group by data1,data2

搞定了他的要求,但是我想到一个可怕的问题!怎么想也搞不定!

望高手帮忙!

问题是

1___1_____a
2___2_____b
3___2_____b
4___2_____b
5___3_____c
6___3_____c
7___4_____d
8___4_____d
9___4_____d

///////////////////////////////////

我要获取的数据为:

1___1_____a
2___2_____b
3__

可以把两个字段联合起来设主键的
create table test
(
id int,
id2 int,
constraint PK_test_idid2 primary key (id, id2)
)
另外告诉你哦,给表添加约束有很多种语法的,直接在字段定义后加primary key是最简单的一种,他会建立一个由系统自动命名的主键约束。
如果要自己命名约束,完整的语法是:
id int constraint 约束名 primary key
如果要把多个字段设为联合主键,只要在primary key后面加个括号,然后把字段名都写在里面就可以了,比如:
id2 int constraint 约束名 primary key (id, id2)
还有一点,constraint 约束名 primary key (id, id2)这个子句可以跟在任何一个字段后面,也可以在字段定义完成后再单独定义,偶觉得语法还是比较自由的哈哈~

至于你的第二个问题么~
偷懒方法:就是取出data1相同记录中id最大和id最小的记录,再用union all连接起来,再去掉重复记录,排下序就OK了……可能有点不符合要求~
select distinct *
from (select min (id) as id,data1,data2
from test
group by data1,data2
union all
select max (id) as id,data1,data2
from test
group by data1,data2) as tmp
order by id

完美方法:你看吧,我不想说……这是参考字段数不确定时,SQL交叉表的建立方法。头都晕了……
declare @sql varchar(max)
set @sql = ''
select @sql = @sql + ' union all select top 2