Ich habe eine komplexe Access Query in eine View auf dem SQL-Server konvertiert, oder jedenfalls versucht. Aber irgendwie funktioniert die View nicht.
Hier die Fehlermeldung:
Fehler bei der SQL-Ausführung. Ausgeführte SQL-Anweisung: SELECT ..... Fehlerquelle: .Net SqlClient Data Provider Fehlermeldung: Methoden für bigint können nicht aufgerufen werden. Ungültiger Spaltenname 'anzahl'
und hier die komplette Abfrage:
SELECT DISTINCT TOP (100) PERCENT g.Nummer AS Gruppennr, CONVERT(bigint, (CASE WHEN aa.gruppe = 1 THEN g.barcode WHEN aa.individuell = 1 THEN qk.einmalbarcode WHEN aa.gruppe = 0 AND aa.individuell = 0 THEN qk.ean END)) AS Barcode, aa.Bezeichnung AS Arbeitsauftrag, qk.Artikelbezeichnung, m.Merkmalname AS Tätigkeit, CASE WHEN aa.gruppe = 0 THEN gm.anzahl ELSE aa.anzahl END AS AnzahlSoll, CASE WHEN aa.gruppe = 1 THEN (SELECT SUM(Anzahl) AS Summe FROM tab_GruppeMerkmal WHERE (GruppeID = gm.GruppeID) AND (MerkmalID = gm.MerkmalID) AND (Rueckmeldung <> 0)) ELSE (SELECT SUM(Anzahl) AS Summe FROM tab_GruppeMerkmal WHERE (qkauftragid = gm.qkauftragid) AND (MerkmalID = gm.MerkmalID) AND (Rueckmeldung <> 0)) END AS AnzahlIst, CASE WHEN aa.gruppe = 1 THEN (CASE WHEN g.anzahl <= (SELECT SUM(Anzahl) AS Summe FROM tab_GruppeMerkmal WHERE (GruppeID = gm.GruppeID) AND (MerkmalID = gm.MerkmalID) AND (Rueckmeldung <> 0)) THEN 'ja' ELSE 'nein' END) ELSE (CASE WHEN gm.anzahl <= (SELECT SUM(Anzahl) AS Summe FROM tab_GruppeMerkmal WHERE (qkauftragid = gm.qkauftragid) AND (MerkmalID = gm.MerkmalID) AND (Rueckmeldung <> 0)) THEN 'ja' ELSE 'nein' END) END AS fertig, aa.AAID, p.PersNr, CASE WHEN p.persnr = 0 THEN 'unbearbeitet' ELSE [p].[VName] + ' ' + [p].[NName] END AS Bearbeiter, CASE WHEN aa.gruppe = 0 THEN gm.QKAuftragID ELSE - 1 END AS QKAuftragID, gm.MerkmalID, CASE WHEN gm.rueckmeldungbestaetigt = 0 THEN 'nein' ELSE 'ja' END AS Bestätgit FROM dbo.ARBEITSAUFTRAG AS aa INNER JOIN dbo.tab_Gruppe AS g ON aa.AAID = g.AAID INNER JOIN dbo.tab_GruppeMerkmal AS gm ON g.ID = gm.GruppeID INNER JOIN dbo.QKAUFTRAG AS qk ON gm.QKAuftragID = qk.QKAuftragID INNER JOIN dbo.MERKMALE AS m ON gm.MerkmalID = m.MerkmalID INNER JOIN dbo.Personal AS p ON gm.UserID = p.PersNr WHERE (aa.Abgeschlossen = 0) AND (g.FreiVp = 0) ORDER BY aa.AAID, Gruppennr, Barcode
Wo ist der Fehler? Ich sehe den Wald vor lauter Bäumen nicht :-(
so: ich habe jetzt den Fehler eingegrenzt. Der Fehler liegt in diesem Code-Ausschnitt:
CONVERT(bigint, (CASE WHEN aa.gruppe = 1 THEN g.barcode WHEN aa.individuell = 1 THEN qk.einmalbarcode WHEN aa.gruppe = 0 AND aa.individuell = 0 THEN qk.ean END)) AS Barcode
Die Barcodes sin in den Tabellen als nvarchar(50) hinterlegt. Der SELECT DISTINCT mag aber keine nvarchar Spalten. Wie kann ich das Problem umschiffen?
So, ich habe das Problem jetzt gelöst. Da unsere Barcode nur aus Ziffern bestehen, habe ich mit meinem Chef besprochen, dass ich in der DB die nvarchar(50) Felder durch bigint ersetze.
z.B.
....
0 [AnzahlIst],
0 [fertig]
....
Und so das Problem einzugrenzen?