Как я могу использовать если оператор после CTE (SQL Server 2005)

Главная причина я все еще использую nAnt по msbuild для моих автоматизированных сборок, состоит в том, что у меня есть более тонкая настройка на моих сборках. Из-за msbuild, который имеет использование csproj, это - файл типа "build", весь источник в том проекте компилируется в один блок. Который заставляет меня иметь много проектов в моем решении для крупных проектов, где я разделяю логику. Хорошо с nant, я могу расположить свою сборку, где я могу скомпилировать то, что я хочу в несколько блоков от одного проекта.

мне нравится этот маршрут, потому что он мешает мне иметь во многие файлы проекта в моем решении. Я могу иметь один проект с папками, разделяющими слои, и затем использовать nant для встраивания каждого слоя в свой собственный блок.

Однако я действительно использую и nant и msbuild в соединении для некоторых задач сборки, как создание приложений WPF. Просто намного легче скомпилировать приложение WPF с целью msbuild в nant.

Для окончания это и точка моего ответа - то, что мне нравится использовать их рядом, но когда я использую msbuild в этой конфигурации, это обычно для прямой компиляции, не выполнения любых задач автоматизации сборки как копирование файлов к каталогу, генерация документации справки или выполнение моих модульных тестов, например.

23
задан marc_s 13 October 2009 в 07:26
поделиться

2 ответа

Общие табличные выражения определены в контексте одного оператора:

WITH cte_name AS (
  <cte definition>)
<statement that uses cte>;

Таким образом, вы можете сделайте что-нибудь вроде:

WITH CTE
AS
( 
    SELECT * FROM SOMETABLE
)
SELECT * FROM CTE;

или

WITH CTE
AS
( 
    SELECT * FROM SOMETABLE
)
UPDATE CTE 
SET somefield = somevalue
WHERE id = somekey;

За CTE должен следовать один SELECT, INSERT, UPDATE, MERGE или Инструкция DELETE, которая ссылается на некоторые или все столбцы CTE. CTE также может быть указанным в СОЗДАТЬ ВИД заявление как часть определения Оператор SELECT представления

24
ответ дан 29 November 2019 в 02:04
поделиться

Самое близкое, что вы получите, - это использовать UNION ALL для грубого переключения выбора:

DECLARE @ROLEID AS INT

SELECT @ROLEID = [ROLE ID] FROM TBLROLE

;WITH CTE
AS
( 
    SELECT * FROM SOMETABLE
)
SELECT
    --somecolumns
FROM
    CTE
    --other stuff too
WHERE
    @ROLEID = 1
UNION ALL
SELECT
    --somecolumns
FROM
    CTE
    --other stuff too
WHERE
    @ROLEID = 2
UNION ALL
SELECT
    --somecolumns
FROM
    CTE
    --other stuff too
WHERE
    @ROLEID = 3
...
UNION ALL
SELECT
    --somecolumns
FROM
    CTE
    --other stuff too
WHERE
    @ROLEID = n
10
ответ дан 29 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: