32

次のコードでビューを作成します

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主キーとして定義したいのですが、それは可能ですか?これが可能である場合、どうすればよいですか?

4

5 に答える 5

46

ビューに主キーを作成することはできません。SQL Serverでは、ビューにインデックスを作成できますが、これは主キーの作成とは異なります。

あなたがあなたの見解に鍵が必要な理由についてもっと多くの情報を私たちに与えれば、おそらく私たちはそれを手伝うことができます。

于 2012-07-11T17:55:30.303 に答える
3

主キーを作成できない場合がありますが(たとえば)、ビューが主キーを持つテーブルに基づいており、キーがビューに含まれている場合、主キーはビューにも反映されます。主キーを必要とするアプリケーションは、Lightswitchの場合と同様に、ビューを受け入れる場合があります。

于 2017-03-31T03:50:29.163 に答える
3

このパーティーに少し遅れましたが、これもうまくいきます:

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回繰り返されます(異なる一意のデータが関連付けられています)。これの優れたトリックは、元のIDを各UniqueIDから効果的に判別できることです[ID] + RowNumber() = 11、12、13、14、21、22、23、24など。RowNumber()と[ID]をビューに追加すると、データから元のキーを簡単に判別できます。ただし、これはテーブルにコミットする必要があるものではありません。これは、OVER(ORDER BY [ID] ASC)を使用しても、ビューのRowNumber()が基になるデータの変更と確実に同じになることはないと確信しているためです。それを助けようとします。

出力例([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

表1:

[ID] [Name] 1 Amazon

表2:

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

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
于 2020-02-11T14:55:53.213 に答える
1

SQL Serverクエリデザイナでビューを作成した後、「テーブル/ビュー'dbo.vMyView'に主キーが定義されていません」というエラーが発生しました。列でISNULLを使用して、エンティティフレームワークがそれを主キーとして使用するように強制することで問題を解決しました。警告を消すには、VisualStudioを再起動する必要がある場合があります。

CREATE VIEW [dbo].[vMyView]
AS
SELECT ISNULL(Id, -1) AS IdPrimaryKey, Name
FROM  dbo.MyTable
于 2020-07-08T18:33:55.640 に答える
0

これは私のために働いた。

ビューの他の列であるpri_keyとして、ROW_NUMBER()を(選択したcolumn_name_で並べ替えて)選択します。

于 2020-03-03T13:45:16.040 に答える