2017-12-20 1 views
0

wie erstellen Sicht dieser Abfrage jemand bitte helfen Sie mir, ich erstellen möchten Hinblick darauf, aber seine zeige mirWie mehrere Tabellen in einer Ansicht

Msg 4506, 16 Level-Fehler zu verbinden, Status 1, Prozedur ordersview, Zeile 3 Spaltennamen in jeder Ansicht oder Funktion müssen eindeutig sein. Spaltenname 'ID' in Sicht oder Funktion 'ordersview' wird mehrfach angegeben.

CREATE VIEW ordersview 
AS 
Select * from UserClaimData cd 
Inner join UserClaimDeductions ud on 
ud.CLAIMID = cd.ID 
Inner join UserClaimApproval ua on 
ua.CLAIMID = cd.ID 
inner join ClaimDataBreakdown cb on 
cb.CLAIMID = cd.ID 
inner join AppExpenseTypes ae on 
ae.ID = cb.EXPENSETYPE 
inner join AppNOWTypes an on 
ae.ID = an.EXPENSETYPEID 
inner join AppAreas aa on 
aa.ID = cb.AREAID 
inner join AppZones az on 
cb.ZONEID = az.ID 
inner join AppRegions ar on 
ar.ID = cb.REGIONID 
+1

Nicht nur 'Select * von ...'. Wählen Sie Ihre Spalten –

Antwort

1

Die Antwort auf die Frage, die Sie gefragt haben, ist speziell von jedem Tabellenelemente zu verweisen; zum Beispiel:

CREATE VIEW ordersview 
AS 
Select cd.ID AS ID1, ua.ID as ID2, etc... from UserClaimData cd 
Inner join UserClaimDeductions ud on 
ud.CLAIMID = cd.ID 
Inner join UserClaimApproval ua on 
ua.CLAIMID = cd.ID 
inner join ClaimDataBreakdown cb on 
cb.CLAIMID = cd.ID 
inner join AppExpenseTypes ae on 
ae.ID = cb.EXPENSETYPE 
inner join AppNOWTypes an on 
ae.ID = an.EXPENSETYPEID 
inner join AppAreas aa on 
aa.ID = cb.AREAID 
inner join AppZones az on 
cb.ZONEID = az.ID 
inner join AppRegions ar on 
ar.ID = cb.REGIONID 

Ich würde jedoch vorschlagen, dass Sie nicht solch eine komplexe Verbindung in einer Ansicht setzen. Betrachten Sie die gewünschten Spalten und denken Sie vielleicht über eine gespeicherte Prozedur oder eine Tabellenwertfunktion nach.

0

Welchen Teil der Fehlermeldung verstehen Sie nicht?

Sie haben select *, die alle Spalten aus allen Tabellen zusammenführt. Nur basierend auf den join Bedingungen ist klar, dass die meisten Tabellen eine ID Spalte haben, so dass es mehrere Spalten gibt, die ID genannt werden. CLAIMID scheint auch ziemlich beliebt.

Im Allgemeinen wird davon abgeraten, select * zu verwenden. Es sollte jedoch nicht für Ansichten verwendet werden. Eine Ansicht sollte die Spalten angeben, die es enthält:

select cd.Id, . . . 
0

Ein Blick wie eine virtuelle Tabelle ist, so kann man nicht den gleichen Namen für 2 (oder mehr) Spalten haben.

Um dies zu vermeiden, geben Sie in Ihrer Select-Abfrage anstelle von * die Spaltennamen ein, und wenn es zwei Spalten mit demselben Namen gibt und Sie beide in der Ansicht benötigen, geben Sie ihnen unterschiedliche Aliasnamen.

Angenommen, Sie haben SpalteA in TableA und TableB, und Sie möchten beide in der Ansicht anzeigen. Erstellen Sie Ansicht wie folgt

CREATE VIEW vm_Sample 
SELECT 
A.COLUMNA COLUMNA_1, 
B.COLUMNA COLUMNA_2 
    FROM TABLEA A INNER JOIN TABLE B 
    ON A.ID = B.ID 
0

Ihre Sicht hat mehr als eine Spalte mit demselben Namen, und das verursacht den Fehler.

  • AppRegions hat eine Spalte ID

  • AppAreas hat eine Spalte ID

  • UserClaimData hat eine Spalte ID

Ändern Sie den Select * genannt die Spalten angeben, genannt genannt die ta Bles, die Sie in der View-Tabelle haben möchten, und fügen Sie einen bestimmten Namen hinzu, oder legen Sie sie einfach nicht.

Sie müssen den Namen einiger Spalten in der Ansicht ändern. Verwenden Sie AppAreas.ID as aaID

Verwandte Themen