使用主键创建视图?

Ali*_*hşi 22 t-sql sql-server primary-key sql-view

我用以下代码创建一个视图

SELECT
    CONVERT(NVARCHAR, YEAR(okuma_tarihi)) + 'T1' AS sno,
    YEAR(okuma_tarihi) AS Yillar,
    SUM(toplam_kullanim_T1) AS TotalUsageValue, 'T1' AS UsageType
FROM
    TblSayacOkumalari
GROUP BY
    CONVERT(NVARCHAR, YEAR(okuma_tarihi)) + 'T1', YEAR(okuma_tarihi)

UNION ALL

SELECT
    CONVERT(NVARCHAR, YEAR(okuma_tarihi)) + 'T2' AS sno,
    YEAR(okuma_tarihi) AS Yillar,
    SUM(toplam_kullanim_T2) AS TotalUsageValue, 'T2' AS UsageType
FROM
    TblSayacOkumalari
GROUP BY
    CONVERT(NVARCHAR, YEAR(okuma_tarihi)) + 'T1', YEAR(okuma_tarihi)

UNION ALL

SELECT
    CONVERT(NVARCHAR, YEAR(okuma_tarihi)) + 'T3' AS sno,
    YEAR(okuma_tarihi) AS Yillar,
    SUM(toplam_kullanim_T3) AS TotalUsageValue, 'T3' AS UsageType
FROM
    TblSayacOkumalari
GROUP BY
    CONVERT(NVARCHAR, YEAR(okuma_tarihi)) + 'T1', YEAR(okuma_tarihi)
Run Code Online (Sandbox Code Playgroud)

我想定义CONVERT(nvarchar, YEAR(okuma_tarihi)) + 'T1' AS sno为主键是可能的吗?如果可能,我该怎么办?

Kev*_*mey 37

您无法在视图上创建主键.在SQL Server中,您可以在视图上创建索引,但这与创建主键不同.

如果您向我们提供有关您希望在视图中使用密钥的原因的更多信息,也许我们可以帮助您.

  • "如果您向我们提供有关您希望在视图上显示密钥的原因的更多信息" - 实体框架会发出警告,指出视图没有主键:`错误6002:表/视图'mydb.dbo.myview'没有一个主键定义...` (13认同)
  • @Ivan以下链接可能有助于解决这种情况:http://stackoverflow.com/a/2715299/1464699 (8认同)
  • 我从视图中创建了一个模型,并将sno manualy更改为实体键.当我更新模型时,我必须将其更改为实体键.这对我来说不是功能上的. (3认同)
  • @Marco:为避免混淆,不,您不能在视图上创建 PK,即使它是模式绑定的。但是,如果您愿意,您可以在其上放置一个唯一的聚集索引,从实际的角度来看,这几乎是相同的,但是它的元数据会有所不同(例如,sys.objects 中没有 PK 对象,列sys.indexes 中的 is_primary_key 是 0, ... ) 所以一些应用程序(比如一些 ORM 的)不会识别它来找出键列,例如.. (3认同)