Ich baue eine einmalige Abfrage, um durch eine Reihe von verbundenen Tabellen zu durchlaufen. Die SELECT-Anweisung verwendet "SELECT *". Da es sich um eine Tabelle mit vielen Feldern handelt, möchte ich nicht jede Spalte als Variable angeben. Gibt es eine Möglichkeit, IN ein Array oder SET von einer Art zu holen und einfach die Werte zu nehmen, die ich will?T-SQL, Cursor, FETCH INTO. Wie verwende ich SELECT *
Antwort
INTO @variable_name[ ,...n]
„Erlaubt Daten aus den Spalten einer platzierten in lokale Variablen holen
Jede Variable in der Liste, von links nach rechts, wird mit der entsprechenden Spalte zugeordnet sind in der Cursor-Ergebnismenge. Der Datentyp jeder Variablen muss übereinstimmen oder eine unterstützte implizite Konvertierung des Datentyps der entsprechenden Ergebnismengenspalte sein. Die Anzahl der Variablen muss mit der Anzahl der Spalten in der Cursorauswahlliste übereinstimmen. "
Wenn Sie schauen, Cursor verwenden Sie eine bessere Flexibilität bei CLR Stored procedures
Selbst wenn es war, würden Sie nicht wollen. Das Extrahieren von Feldern ist eine der häufigsten Ursachen für die Leistungsdegradation in einer SQL Server-Anwendung. Dadurch schränken Sie die Fähigkeit des Optimierers ein, Indizes effektiv zu verwenden.
Wie würden Sie vorschlagen, die gewünschten Werte zu erfassen, ohne Spaltennamen anzugeben?
finden Warum müssen Sie einen Cursor verwenden? Das ist in SQL Server-Szenarien verpönt - die meiste Zeit sind sie unnötig und normalerweise sind sie sehr langsam und beeinträchtigen die Performance.
Was versuchen Sie mit Ihrem Cursor zu erreichen? Könnten Sie das nicht auf einer Set-basierten Weise tun und die Fähigkeiten von SQL Server maximal nutzen?
Marc
In 2k5 (SQL 2000 verschiedene Systemobjekte hat), die SQL-Metadaten verwenden, um schnell Abfragen mit langen Listen der Tabelle/Spaltennamen schreiben:
SELECT
O.Name + '__' + C.Name + ' = ' + O.Name + '.' + C.Name + ','
FROM Sys.Objects O
JOIN Sys.Columns C
ON C.Object_Id = O.Object_Id
WHERE O.Name IN ('Table1', 'Table1')
ORDER BY O.Name, C.Column_Id
Ich bin mir nicht ganz sicher, was Sie mit dem Ergebnissatz machen wollen, aber das könnte ein guter Anfang sein.
Auch könnten Sie Variablen als SQL_VARIANT deklarieren und Ergebnismengen in sie wie folgt FETCH:
DECLARE @Col1 SQL_VARIANT
SELECT @Col1 = Table1.Column1 FROM Table1
PRINT CONVERT(varchar(max), @Col1)
Ich bin mir nicht sicher, was das gewinnt man aber.
Dies wird nur für diejenigen empfohlen, die täglich mit SQL arbeiten, nicht speziell um diese Frage zu beantworten.
Das RedGate-Produkt SQL Prompt bietet die Möglichkeit, Platzhalterzeichen mithilfe von Tastenkombinationen (Strg-B, Strg-W) in einzelne Feldnamen zu erweitern. Dies kann Ihnen viel Zeit sparen und es einfacher machen, ein paar Felder aus der Abfrage zu entfernen, wenn Sie Most von ihnen benötigen.
In SQL2005 können Sie auch mit der rechten Maustaste auf die Tabelle klicken und eine offene Tabelle auswählen. Dann klickst du auf das kleine SQL-Icon und du siehst die select-Anweisung, etwas wie * aus YourTable auswählen.Wenn Sie erneut auf das! -Symbol klicken, wird die Auswahl * von auf die gesamte Feldliste erweitert. Viel Glück.
- 1. Mysql Cursor/Fetch
- 2. Wie Sie einen Cursor in tsql von Anfang an verwenden
- 3. Dynamischer Cursor in einem Block in TSQL verwendet?
- 4. Leistungsunterschied zwischen INSERT INTO-Tabelle SELECT und SELECT INTO-Tabelle
- 5. Wie verwende ich Bootstrap-select?
- 6. Informix SELECT INTO-Syntaxfehler
- 7. SELECT INTO funktioniert nicht
- 8. Wie verwende ich "Into" LINQ Ausdruck in VB.NET?
- 9. SELECT INTO Variable, zwei Anweisungen, Variablen hinzufügen
- 10. SELECT INTO-Anweisung in sqlite
- 11. ODP.NET und SELECT INTO-Anweisung
- 12. SELECT INTO mehrere @variables MySQL
- 13. PostgreSQL: SELECT INTO - Wie erstellt man Indizes?
- 14. Wie verwende ich einen CTE als Schleife?
- 15. FÜR r in (SELECT ... INTO ...)
- 16. Zählen Reihen vor der Verarbeitung mit einem Cursor Tsql
- 17. Verwende ich Cursor Hand und Cursor Pointer oder beides?
- 18. Wie verwende ich Select with date?
- 19. Hinzufügen von Milisekunden zu einer Datetime in Tsql INSERT INTO
- 20. Verwendung Variable in select - Tsql
- 21. Spalten automatisch in INSERT INTO ... SELECT ... von
- 22. SQL INSERT INTO mit SELECT Abfrage
- 23. Mehrere SELECT in INSERT INTO-Abfrage
- 24. INSERT INTO .. SELECT .. eindeutige Einschränkung Verletzung
- 25. SELECT INTO und "Nicht deklarierte Variable" Fehler
- 26. MySQL INSERT INTO ... SELECT # 1054 ERROR
- 27. INSERT INTO mit SELECT - Nummer passt nicht
- 28. MySQL INSERT INTO ... SELECT wirft Fehler 1064
- 29. SELECT INTO mit mehr als einer Zuschreibung
- 30. SQL Server-Cursor, um den Wert in Select
Dies ist eine ONE-OFF-Abfrage, um einige historische Daten zu beheben. Leistung ist mir egal. wie nameofset ['feldname']. Ich möchte einfach nicht alle Felder definieren. Sieht so aus, als ob es nicht möglich ist :( –