簡體   English   中英

如何在視圖上設置主鍵

[英]How to set Primary Key on a View

我無法更新模型,因為我創建的視圖沒有主鍵。 錯誤消息顯示“未定義主鍵”

ALTER VIEW VwSupplyStatement ADD PRIMARY KEY PK_VwSupplyStatement DISABLE 
NOVALIDATE;
IF OBJECT_ID ('dbo.VwSupplyStatement') IS NOT NULL
DROP VIEW dbo.VwSupplyStatement
GO
CREATE  VIEW [dbo].[VwSupplyStatement]
AS
SELECT
    MAX(Objid) AS Objid,
    MAX(PaymentHeaderId) AS PaymentHeaderId, 
    MAX(PalletNo) AS PalletNo,
    MAX(SequenceNo) AS SequenceNo,  
    MAX(Season) AS Season,
    --MAX(OrganizationId) AS OrganizationId,
    MAX(AccountId) AS AccountId,
    MAX(ShipmentDocumentNumber) AS DocumentNo,
    MAX(AccountFullDescription) AS AccountDescription,
    MAX(ShipmentLoadName) AS Vessel,
    MAX(ShipmentRegionLId) AS TargetMarketId,
    MAX(ContainerNo) AS ContainerNo,
    MAX(QualityCertified) AS QualityCertified,
    MAX(IncoTerm) AS IncoTerm,
    MAX(BuyTerm) AS BuyTerm,
    MAX(TotalpaymentvsPO) AS TotalpaymentvsPO,
    MAX(TripNumber) AS Voyage,
    MAX(DepatureDate) AS DepatureDate,
    MAX(Cartons) AS Cartons,
    MAX(Advance1Currency) AS Advance1Currency,
    MAX(CASE WHEN InvoiceNo ='AD1' THEN 'AD1' END) AS ADvance1InvoiceNo,
    MAX(CASE WHEN InvoiceNo ='AD1' THEN Advanceinvoices END) AS Advance1invoices,
    MAX(CASE WHEN InvoiceNo ='AD1' THEN Amount END) AS AD1Amount,
    MAX(CASE WHEN InvoiceNo ='AD1' THEN AmountPaid END) AS Amount1Paid,
    MAX(CASE WHEN InvoiceNo ='AD1' THEN AmountDue END) AS Amount1Balance,
    ---------------------------------------------------------------------
    MAX(CASE WHEN InvoiceNo ='AD2' THEN 'AD2' END) AS ADvance2InvoiceNo,
    MAX(CASE WHEN InvoiceNo ='AD2' THEN Advanceinvoices END) AS Advance2invoices,
    MAX(CASE WHEN InvoiceNo ='AD2' THEN Amount END) AS AD2Amount,
    MAX(CASE WHEN InvoiceNo ='AD2' THEN AmountPaid END) AS Amount2Paid,
    MAX(CASE WHEN InvoiceNo ='AD2' THEN AmountDue END) AS Amount2Balance,
     ---------------------------------------------------------------------
    MAX(CASE WHEN InvoiceNo ='AD3' THEN 'AD3' END) AS ADvance3InvoiceNo,
    MAX(CASE WHEN InvoiceNo ='AD3' THEN Advanceinvoices END) AS Advance3invoices,
    MAX(CASE WHEN InvoiceNo ='AD3' THEN Amount END) AS AD3Amount,
    MAX(CASE WHEN InvoiceNo ='AD3' THEN AmountPaid END) AS Amount3Paid,
    MAX(CASE WHEN InvoiceNo ='AD3' THEN AmountDue END) AS Amount3Balance
    --MAX(NetPaymentDIP) AS TotalFnl
    --MAX(CreditAmount) AS CreditAmount
FROM dbo.VwSupplyStatementBase
GROUP BY ShipmentDocumentNumber

我如何對此視圖強制執行主鍵?

有沒有一種方法可以修改此sql代碼,以便在Visual Studio上更新模型時它不會損壞?

您不能在視圖上創建主鍵,可以在視圖上創建索引。 有關更多信息, SQL Server索引視圖

為了解決您的問題

強制實體框架使用列作為主鍵,使用ISNULL

SELECT
INULL(MAX(Objid),-1) AS Objid ,.... from FROM dbo.VwSupplyStatementBase
GROUP BY ShipmentDocumentNumber

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM