2016-08-04 28 views
0

--NEUES INFO-- Unten ist, was ich dachte, würde erreichen, was ich fotografiere, aber es gibt einen Syntaxfehler zurück. Jede Idee, wie die Syntaxfehler zu beheben? ...Wie man "*" verwendet, um alle möglichen Variablen zu akzeptieren, wenn man eine mehrwertige Variable deklariert

DECLARE @PersonID TABLE(val int) 
INSERT INTO @PersonID 
VALUES (*) 

--ORIGINAL POST-- Ich mag ein SQL-Variable deklarieren, die an vielen Stellen in einer Abfrage verwiesen werden können.

Das Folgende ist meine SQL die Variable zu deklarieren:

DECLARE @PersonID TABLE(val int) 

INSERT INTO @PersonID 
VALUES (647), (167087) 

Aber manchmal mag ich nicht mein Abfrageergebnis Einträge mit einer endlichen Anzahl von variablen Optionen verbunden gesetzt begrenzen.
Gibt es eine Möglichkeit, das Zeichen "*" im obigen SQL zu verwenden, um die Variable zu öffnen?

Wenn ja, bitte teilen.
Dies wäre eine gute Alternative zum Auskommentieren meiner Deklarationsanweisung sowie jedes Verweises auf die Variable in der gesamten Abfrage.

+1

Können Sie weitere, Beispieldaten und erwartete Ergebnisse ausarbeiten? Vielleicht möchten Sie 'dynamic sql' verwenden, aber es ist schwer zu verstehen, wie es ist ... – sgeddes

+0

Wenn das' INT' Werte sind, dann bitte ** Stop ** mit unnötigen einfachen Anführungszeichen beim Einfügen von Werten (Sie geben nur * * String ** Literale, die SQL Server vor dem Einfügen wieder in 'int' konvertieren muss; Benutze stattdessen: 'INSERT INTO @PersonID VALUES (647), (167087)' –

+0

Hast du das herausgefunden anthony? – scsimon

Antwort

0

SQL Server

Ich glaube, Sie so etwas wie dies wollen:

SELECT someColumn 
FROM someTable 
WHERE @Variable IS NULL OR SomeColumn = @Variable 

Wenn Sie etwas in die Variable nicht passieren alle Zeilen zurückgegeben werden. Wenn Sie etwas an die Variable übergeben, werden die Ergebnisse begrenzt.

Eine längere Methode für Tabellenvariablen wäre die Verwendung einer case-Anweisung oder einer IF-Anweisung.

IF (SELECT COUNT(*) FROM @Variable) > 0 
BEGIN 
SELECT someColumns 
FROM someTable 
INNER JOIN @Variable ON 
someColumn = val 
END 

ELSE 
BEGIN 
SELECT someColumns 
FROM someTable 
END 

Auch für diese Tabelle Variable, wenn Sie es auf NULL gesetzt oder füge keine Zeilen hinein, alle Zeilen werden für die Abfrage zurückgegeben werden. Wenn in der Variablen Werte vorhanden sind, wird INNER JOIN used verwendet.

Verzeihen Sie meine Formatierung. Ich bin auf meinem Handy.