当前位置: 代码迷 >> Sql Server >> SQL2008 如何给没有主键的表添加主键
  详细解决方案

SQL2008 如何给没有主键的表添加主键

热度:658   发布时间:2016-04-24 09:14:30.0
SQL2008 怎么给没有主键的表添加主键?
是这样的,表A是一张有其他表连接而成的视图...因为做的是表的数据合并操作,所以,生成A视图的时候,是没有主键的。

我想问一下,现在这种情况下,怎么给这个视图添加主键,或者把这个视图A复制到视图B然后加主键也行,

现在我的情况是 需要 主键才能使用别人提供的库函数,不然就提示没有唯一标志符


关于表A的形成我也说一下,不是本问题的关键字,但是有更好的想法的,可以说一下。


表A 字段
AID  TID Type,D2,D3,D4,BB,BB,BB
解释一下,AID是表的自增ID,
Type的值只有两个 0,1
BB字段代表是不管 Type值是那个都是相同的数据
D2,D3,D4是Type不一样,那么他的数据就不一样

现在把所有 TID相同的行,且Type不同的行合并成一行,保留BB列,以及两行不同的D2,D3,D4,以及每行的AID

即,合并后的 行为
TID,BB,BB,BB,AID_1,D2_1,D3_1,D4_1,AID_2,D2_2,D3_2,D4_2(合并后不需要Type字段)

这样合并完了就没有主键了

这个做法我就是表A join 表A 就完事了


select  a.TID,a.BB,a,BB,a.BB,A.AID,a.D2,a.D3,a.D4,b.AID,b.D2,B.D3,B.D4
from A  a join A b on a.TID=b.TID and A.type=0 and B.Type=1



------解决思路----------------------
既然你两行并一行,AID_1 或 AID_2 都可以做主键啊!
你是不是有3个BB字段才导致“别人提供的库函数”判断主键字段的时候出错?
------解决思路----------------------
生成新表?用以上语法建主健
ALTER TABLE 表 ADD CONSTRAINT 主健名 PRIMARY KEY (列名)

如果只是约束也可用触发器控制
------解决思路----------------------
联机丛书中就有给视图建索引的例子,照做就是。
CREATE VIEW Sales.vOrders
WITH SCHEMABINDING
AS
    SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Revenue,
        OrderDate, ProductID, COUNT_BIG(*) AS COUNT
    FROM Sales.SalesOrderDetail AS od, Sales.SalesOrderHeader AS o
    WHERE od.SalesOrderID = o.SalesOrderID
    GROUP BY OrderDate, ProductID;
GO
--Create an index on the view.
CREATE UNIQUE CLUSTERED INDEX IDX_V1 
    ON Sales.vOrders (OrderDate, ProductID);