gpt4 book ai didi

sql-server - 使用 T SQL 在索引 View 上生成主键

转载 作者:行者123 更新时间:2023-12-05 09:00:03 24 4
gpt4 key购买 nike

我尝试创建一个索引 View ,并在该 View 上创建唯一的聚集索引。我的问题是如何在 select 子句中生成主键。例如

Create view ssrs.vMyView
with schemabinding
as
select firstname, lastname, other columns --example columns
from mytable

如何为每一行即时生成主键?

更新

问题是它没有唯一的列或列的组合,所以我需要即时生成一个唯一的 ID。 名字和姓氏只是示例。基表有主键。

提前致谢!

最佳答案

创建此 View 后,如果您遵守 all the rules and requirements for an indexed view ,您应该能够像这样创建聚簇索引:

CREATE CLUSTERED INDEX cix_vMyView ON dbo.vMyView(....)

您需要选择一个好的、有效的聚簇键 - 最好根据 NUSE 原则:

  • 缩小
  • 独一无二
  • 静态
  • 不断增加

INT IDENTITY 将是完美的 - 或者类似于 BIGINT 或 INT 和 DATETIME 的组合。

更新:看到您的基表甚至没有主键(这是一个更大的问题,您需要尽快修复!!如果它没有主键,则它不是表),您可以在 View 定义中使用类似 ROW_NUMBER() 的内容:

CREATE VIEW ssrs.vMyView
WITH SCHEMABINDING
AS
SELECT firstname, lastname,
ROW_NUMBER() OVER(ORDER BY Lastname, FirstName) AS 'ID'
FROM dbo.mytable

给你一个“人工”唯一的、不断增加的主键。

(2014 年 4 月 25 日更新:不幸的是,与我在发帖时的看法相反,这行不通,因为您无法在以下 View 上创建聚簇索引包含一个排名函数,如 ROW_NUMBER .....)。感谢@jspaey 指出这一点。因此,这使得在基表上拥有主键并将其包含在 View 定义中变得更加重要!)

但同样:如果您的基表没有主键 - 首先修复它!!

更新 #2: 好的,所以您的基表确实毕竟有一个主键 - 那么为什么您的 View 定义中没有这一部分呢?我会总是在我的 View 中包含来自所有基表的所有主键 - 只有那些 PK 才能让您清楚地识别基表中的行,并且它们允许您使您的 View 可更新。

关于sql-server - 使用 T SQL 在索引 View 上生成主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7969244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com