首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否使用主键创建视图?

是否使用主键创建视图?
EN

Stack Overflow用户
提问于 2012-07-12 01:39:09
回答 5查看 131.6K关注 0票数 29

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

代码语言:javascript
复制
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)

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-07-12 01:55:30

不能在视图上创建主键。在SQL Server中,您可以使用create an on a view,但这与创建主键不同。

如果你给我们更多的信息,为什么你想在你的视图上有一个键,也许我们可以帮助你。

票数 45
EN

Stack Overflow用户

发布于 2017-03-31 11:50:29

您可能无法创建主键(每次),但如果您的视图基于具有主键的表,并且该键包含在视图中,则主键也将反映在视图中。需要主键的应用程序可以接受视图,就像Lightswitch一样。

票数 3
EN

Stack Overflow用户

发布于 2020-02-11 22:55:53

参加这个聚会有点晚了--但这也很有效:

代码语言:javascript
复制
CREATE VIEW [ABC].[View_SomeDataUniqueKey]
AS
SELECT 
CAST(CONCAT(CAST([ID] AS VARCHAR(4)), 
        CAST(ROW_NUMBER() OVER(ORDER BY [ID] ASC) as VARCHAR(4)) 
        )  AS int) AS [UniqueId]
,[ID]
FROM SOME_TABLE JOIN SOME_OTHER_TABLE
GO

在我的例子中,连接的结果是ID -主键被重复5次(关联不同的唯一数据),其中的妙招是可以从每个UniqueID有效地确定原始ID ID+RowNumber() = 11,12,13,14,21,22,23,24等等。如果您将RowNumber()和ID添加回视图中,您可以很容易地从数据中确定您的原始键。但是-这不是应该提交到表中的东西,因为我相当确定视图的RowNumber()永远不会随着底层数据的改变而可靠地相同,即使使用OVER(ORDER BY ID ASC)来尝试和帮助它。

示例输出(从REF.View_Systems中选择UniqueId,ID,ROWNR,Name ):

UniqueId ID ROWNR Name 11 1 1 Amazon A 12 1 2 Amazon B 13 1 3 Amazon C 14 1 4 Amazon D 15 1 5 Amazon E

Table1:

[ID] [Name] 1 Amazon

Table2:

[ID] [Version] 1 A 1 B 1 C 1 D 1 E

代码语言:javascript
复制
CREATE VIEW [REF].[View_Systems]
AS    
SELECT 
CAST(CONCAT(CAST(TABA.[ID] AS VARCHAR(4)), 
        CAST(ROW_NUMBER() OVER(ORDER BY TABA.[ID] ASC) as VARCHAR(4)) 
        )  AS int) AS [UniqueId]
,TABA.[ID]
,ROW_NUMBER()  OVER(ORDER BY TABA.[ID] ASC) AS ROWNR
,TABA.[Name]  
FROM  [Ref].[Table1] TABA LEFT JOIN [Ref].[Table2] TABB ON TABA.[ID] = TABB.[ID]
GO
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11438319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档