我尝试在视图上创建索引视图和唯一聚簇索引.我的问题是如何在select子句中生成主键.例如
Create view ssrs.vMyView
with schemabinding
as
select firstname, lastname, other columns --example columns
from mytable
Run Code Online (Sandbox Code Playgroud)
如何动态生成每一行的主键?
更新
问题是它没有唯一的列或列的组合,所以我需要动态生成一个唯一的id.名字和姓氏只是一个例子.基表有主键.
提前致谢!
创建此视图后,如果您遵循索引视图的所有规则和要求,则应该能够像这样创建聚簇索引:
CREATE CLUSTERED INDEX cix_vMyView ON dbo.vMyView(....)
Run Code Online (Sandbox Code Playgroud)
您需要选择一个好的,有效的群集密钥 - 最好根据NUSE原则:
一个INT IDENTITY将是完美的 - 或类似BIGINT或INT和DATETIME的组合.
更新:看到您的基表甚至没有主键(这是一个更大的问题,你需要尽快修复!! 如果它没有主键,它不是一个表),你可以使用一些东西就像ROW_NUMBER()在你的视图定义:
CREATE VIEW ssrs.vMyView
WITH SCHEMABINDING
AS
SELECT firstname, lastname,
ROW_NUMBER() OVER(ORDER BY Lastname, FirstName) AS 'ID'
FROM dbo.mytable
Run Code Online (Sandbox Code Playgroud)
给你一个"人为的"独特的,不断增加的主键.
(更新2014年4月25日:不幸的是,与我在发布此信息时的信念相反,这不起作用,因为您无法在包含排名函数(如ROW_NUMBER.....)的视图上创建聚簇索引).感谢@jspaey指出这一点.所以这使得在基表上有一个主键并在视图定义中包含它更为重要!)
但是又一次:如果您的基表没有主键 - 先修复它!
更新#2:好的,所以你的基表确实有一个主键 - 那么为什么不是你的视图定义的那一部分?我总是会在视图中包含所有基表中的所有主键 - 只有那些PK才能让您清楚地识别基表中的行,并且它们允许您使视图可更新.
| 归档时间: |
|
| 查看次数: |
9822 次 |
| 最近记录: |