2017-06-15 2 views
0

Ich bin relativ neu in SQL und ich versuche, eine Abfrage zu schreiben, die das Ergebnis von mehreren Zeilen in eine lokale VariableSQL Query Ergebnisse zu lokalen Variablen ohne eindeutige Kennung

DECLARE @x VARCHAR(MAX) 
SET @x= (SELECT someCol 
       FROM table) 

--Does important stuff to the @x variable 

SELECT @x 

Während meiner Recherchen zuweisen Ich habe festgestellt, dass dies nicht funktioniert, da die Unterabfrage nur einen Wert zurückgeben kann und meine Abfrage mehrere Ergebnisse liefert. Allerdings kann ich nicht so etwas tun:

DECLARE @x VARCHAR(MAX) 
SET @x= (SELECT someCol 
       FROM table 
       where id= 'uniqueIdentifier') 

--Does important stuff to the @x variable 

SELECT @x 

Der Grund, warum ich kann nicht verwenden, wo Klausel ist, dass ich dies für die gesamte Tabelle tun muß und nicht nur eine Zeile. Irgendwelche Ideen?

EDIT: Ich erkennen meine Frage zu breit war, so werde ich versuchen, den Code neu zu formatieren einig Kontext

SELECT  col_ID, col_Definition 
FROM   myTable 

zu geben Wenn ich diese Abfrage col_Definition laufen war eine große varchar zurückkehren würde, die eine Menge hält von Informationen wie dem Primärschlüssel einer anderen Tabelle, die ich zu erhalten versuche. Sagen wir zum Beispiel:

DECLARE @x VARCHAR(MAX) 
SET @x= (SELECT col_Definition 
       FROM myTable 
       WHERE col_ID = 1) 
    --Function to do the filtering of the varchar variable that works as expected 
    SELECT @x as [Pk of another table] --returns filtered col_Definition 

Dies funktioniert wie erwartet, da es eine einzelne Zeile zurückgibt. Ich möchte jedoch diese Abfrage ausführen können, so dass es das gefilterte Varchar für jede einzelne Zeile in der Tabelle "myTable" zurückgibt.

+3

Warum müssen Sie alle Zeilen in 1 Variable setzen? Warum nicht eine temporäre Tabelle verwenden? –

+0

Der einzige Grund, warum ich es in eine Variable schreiben möchte, ist, dass ich die Ergebnisse filtern kann. Die Daten in "someCol" sind ein Varchar, das ziemlich lang ist und den Primärschlüssel einer anderen Tabelle enthält. Also verwende ich die Variable, um die Arbeit zu filtern und dann die gefilterten Ergebnisse anzuzeigen. Dies funktioniert für eine einzelne Zeile, aber ich habe keine Ahnung, wie ich es mit mehreren Zeilen angehen soll. Ich werde jedoch versuchen, eine temporäre Tabelle zu verwenden! @WEI_DBA – vax

Antwort

0

Wenn ich Wenn Sie es richtig verstehen, speichern Sie eine PK, die in eine Zeichenfolge eingebettet ist, die Sie schließlich herausholen und zur Verknüpfung mit dieser Tabelle verwenden möchten. Ich würde denken, die Gruppe der Datensätze, mit denen Sie arbeiten möchten, in eine temporäre Tabelle zu setzen und dann etwas Logik auf diese varchar-Spalte anzuwenden, um die PK zu erhalten. Diese Logik ist am besten satzbasiert, aber wenn Sie Zeile für Zeile wirklich wollen, verwenden Sie eine Skalarfunktion anstelle einer Variablen und wenden sie auf die temporäre Tabelle an:

Wählen Sie pk_column, dbo.scalarfunction (pk_column) als RowByRowWithFunction, substring (pk_column, 5,10) als SetBasedMuchFaster von #tempTable.

0

Sie müssen definieren, was der 'uniqueIdentifier' zuerst ist. Nicht sicher eine Unterabfrage und packt das Ergebnis mit und eine andere Abfrage mit dem Ergebnis der Ausführung, wenn Sie tun eine INNER irgendeine Art JOIN oder wenn Python oder eine andere Sprache, die Daten zu verarbeiten, dann verwenden:

("SELECT someCol 
      FROM table 
      where id='%s'" % Id) 
Verwandte Themen