Условный UNION в хранимой процедуре

Bonjour!

Итак, в хранимой процедуре я хотел бы выполнить условное объединение, определяемое параметром. Как я могу это сделать?

Вот моя процедура «не работает»:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


CREATE PROCEDURE [dbo].[spp_GetAdressesList]

    @OnlyLinked   bit         = 1,    
    @ObligedId    int         = -1 
AS 
BEGIN

    SELECT 
       [ID_ADRESS]
      ,[ID_ENT]
      ,[VOI_ADRESS]
      ,[NUM_ADRESS]
      ,[BTE_ADRESS]
      ,[CP_ADRESS]
      ,[VIL_ADRESS]

    FROM [ADRESSES]
    WHERE  
    (

        (VIL_ADRESS != 'NC' AND VIL_ADRESS != '--')
        AND
        (@OnlyLinked = 0 OR ID_ENT is not null)

    )

    IF (@ObligedId != -1)
    BEGIN
        UNION
            SELECT 
               [ID_ADRESS]
              ,[ID_ENT]
              ,[VOI_ADRESS]
              ,[NUM_ADRESS]
              ,[BTE_ADRESS]
              ,[CP_ADRESS]
              ,[VIL_ADRESS]

            FROM [ADRESSES]
            WHERE  
            ID_ADRESS = @ObligedId
    END

END

Итак, если @ObligedId est = a -1, я бы хотел, чтобы у меня не было UNION.

Я сделал это с помощью динамический запрос varchar, в конце я выполнял запрос с помощью exec. Но это, по-видимому, менее эффективно, и вы можете выполнить sql-инъекцию (это для приложения asp.net) с помощью динамических запросов. Я решил изменить все свои хранимые процедуры

Невозможно выполнить объединение в предложении IF?

Спасибо за все ответы без исключений ..

11
задан marc_s 20 January 2011 в 11:06
поделиться