Ich habe eine Tabelle (nicht von mir entworfen) mit 20 variabel benannten Spalten. Das heißt, je nachdem, welche Art von Datensatz Sie betrachten, kann sich der zutreffende Name der Spalte ändern.
Die möglichen Spaltennamen werden in einer anderen Tabelle gespeichert, die ich sehr einfach abfragen kann.
Daher lautet die Abfrage, nach der ich wirklich suche, ungefähr so:
SELECT Col1 AS (SELECT ColName FROM Names WHERE ColNum = 1 and Type = @Type),
Col2 AS (SELECT ColName FROM Names WHERE ColNum = 2 and Type = @Type)
FROM Tbl1
WHERE Type = @Type
Das funktioniert natürlich nicht. Wie kann ich also ein ähnliches Ergebnis erzielen?
'
Ich habe versucht
Es stellte sich heraus, dass ich eine falsche Abfrage verwendet habe, um das dynamische SQL zu erstellen, und als solche eine leere Zeichenfolge erstellt habe. SQL Server hat die leere Zeichenfolge definitiv korrekt ausgeführt.EXECUTE
, eine Abfragezeichenfolge zu erstellen und zu erstellen, aber das gibt nur "Befehl (e) erfolgreich abgeschlossen" zurück und scheint kein Rowset zurückzugeben.
Beachten Sie, dass der Grund dafür, dass dies auftritt, anstatt nur die Spaltennamen fest zu codieren, darin besteht, dass die Spaltennamen vom Benutzer konfigurierbar sind.
quelle
Antworten:
Versuchen Sie den folgenden Code:
Dies gibt die SELECT-Anweisung zurück:
SELECT CONVERT(INT, Col1) AS [AccountID],CONVERT(VARCHAR(50), Col2) AS [AccountName],CONVERT(DATE, Col3) AS [AccountOpenDate] FROM #Data WHERE [Type] = 'Account'
quelle
Dies klingt für eine Front-End-Display-Lösung am besten. Abfrage 1 würde Ihre Daten zurückziehen, Abfrage 2 würde die Spaltennamen zurückziehen und im Code, wenn Sie die Struktur erstellen, die Sie zur Anzeige verwenden, die Überschriften aus der zweiten Abfrage festlegen.
Während eine Pure SQL-Methode möglich sein kann, handelt es sich um dynamisches SQL, und die Codepflege wäre ein Albtraum.
Auch Sie suchen wahrscheinlich
sp_executesql
und nicht nurEXECUTE N'Query String'
das kann Ihr Problem des Befehls erfolgreich abgeschlossen beheben.quelle