Использование логики в TSQL - PullRequest
2 голосов
/ 28 марта 2009

Я хочу сделать что-то подобное в TSQL (SQL Server 2005):

IF (Column1 = x)
{
     --CTE statement
}
ELSE
{
    --SQL statement
}

Любая помощь приветствуется.

Ответы [ 2 ]

4 голосов
/ 28 марта 2009

Это часть запроса? или самостоятельно?

За пределами SELECT у вас есть:

IF ([test])
BEGIN
     [true branch]
END
ELSE
BEGIN
    [false branch]
END

Ветви могут делать что угодно, в том числе использовать CTE и т. Д.

Внутри запроса у вас есть CASE:

SELECT ..., CASE WHEN Column1=x THEN [answer1]
                 ELSE [answer2] END, ...

Однако вы не можете сделать CTE внутри CASE

0 голосов
/ 28 марта 2009

CTE применяется ко всему утверждению и не является автономным. Это предложение или подконструкция в более крупной конструкции SQL.

Это работает, если вывод каждого оператора отличается

IF EXISTS (SELECT * FROM table WHERE Column1 = x)
BEGIN
    ;WITH cStuff AS
    (
        ...
    )
    SELECT 
        ...
    FROM
        tables and cStuff
END
ELSE
BEGIN
    SELECT 
        ...
    FROM
        tables
END

Это работает, если вывод совпадает:

;WITH cStuff AS
(
    ...
)
SELECT 
    ...
FROM
    tables and cStuff
WHERE
    column1 = x
UNION ALL
SELECT 
    ...
FROM
    tables
WHERE
    column1 <> x

В противном случае, я не уверен, чего вы хотите достичь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...