2016-12-08 3 views
1

Auf Tsql zu sein, ich will Variable verwenden als Teil Tsql Code nach einigen Bedingungen ist es eine Möglichkeit, die folgenden zu tun:Verwenden von String-Variablen Teil Tsql Code

DECLARE @mode BINARY = 0 
DECLARE @stringCode VARCHAR(100) 
. 
. 
. 
if(@mode = 1)(
    @stringCode VARCHAR(100) = 'charindex(",", rtrim(col1_name), col2_name)' 
)ELSE(
    @stringCode VARCHAR(100) = '1=1' 
) 

SELECT col1_name, col2_name, col3_name 
    FROM table1_name AS T1 
    INNER JOIN table2_name AS T2 
    ON @stringCode 

Die letzte Abfrage die Variable @stringCode als Teil des Codes.

Nun, es hat nicht so funktioniert, also wollte ich wissen, ob ich das vielleicht anwenden könnte?

Bitte beachten Sie, dass dieser Code nur ein Test zu zeigen, was ich

+1

Wenn Sie dies tun möchten, müssen Sie über dynamische SQL lernen. Wenn Sie dies versuchen und nicht wissen, was dynamisches SQL ist, müssen Sie möglicherweise etwas über SQL im Allgemeinen lernen. –

+0

https://msdn.microsoft.com/en-us/library/ms188001.aspx –

+0

Danke für die Notiz, ich werde über dynamische SQL lesen. Ich bin froh, dass es möglich ist, aber –

Antwort

0

Ich denke, man könnte versuchen, dies so etwas wie, aber nicht sicher, ob diese werden richtige Bedingungen beitreten will.

if(@mode = 1)(
    SELECT col1_name, col2_name, col3_name 
    FROM table1_name AS T1 
    INNER JOIN table2_name AS T2 
     ON charindex(",", rtrim(col1_name), col2_name) 
)ELSE(
    SELECT col1_name, col2_name, col3_name 
    FROM table1_name AS T1 
    INNER JOIN table2_name AS T2 
     ON 1=1 
) 
+0

Dank Juan, das, was ich jetzt benutze, aber der Grund, warum ich eine Variable verwenden muss, weil es mehr Bedingungen gibt und ich auch die gleichen Konzepte auf unterschiedliche Weise anwenden möchte. Ihr Vorschlag ist gut, aber nicht mit dem, was ich suche –

+0

Dann müssen Sie für die dynamische SQL gehen. wie in den Kommentaren vorgeschlagen;), Aber nochmal, du solltest diese "JOIN" Bedingungen überprüfen, sieht sehr komisch aus –

+0

Ja, tut mir leid, ich schrieb die Bedingungen, nur um den Code zu demonstrieren und sie sehen komisch aus :) –

1

Alles, was Sie brauchen, ist 'sp_executesql' System gespeichert proc. Es wird eine Zeichenfolge mit der Abfrage als Eingabe verwendet:

DECLARE @query nvarchar(4000) 
SET @query = N'SELECT col1_name, col2_name, col3_name 
    FROM table1_name AS T1 
    INNER JOIN table2_name AS T2 
    ON ' + @stringCode 

EXEC sp_executesql @query