2013-07-02 2 views

ответ

2
DECLARE @param AS INT = ?; 

IF @param = 1 
BEGIN 
    SELECT 1 AS Y; 
END 
ELSE IF @param = 2 
BEGIN 
    SELECT 2 AS Y; 
END 

Есть два вопросительных знак в запросе и, вероятно, вы проходили только одна переменные. Я видел код, где разработчики передают одно и то же значение дважды (или несколько) раз. Это неэффективно. Лучший способ - получить переданные параметры в переменных SSIS. Преимущества: 1. Вам нужно передать одно значение только один раз. 2. Что еще более важно, если вы изменили порядок, в котором переданные параметры были использованы в sql, вам не нужно изменять их порядок на пользовательском интерфейсе Execute SQL Task Editor // Parameters. Это то, что Энди Леонард предложил позже в своем ответе.

0

Вы можете. Предполагая, что вы ссылаетесь на SQL-задачу Execute, параметры в SQL-запросе Execute с использованием соединения OLE DB используют вопросительные знаки (?) В качестве заполнитель параметров. Вы сопоставляете заполнители с переменными SSIS на странице сопоставления параметров в задаче SQL Execute. В собственности SQLStatement вы напишете: (? = 1) (? = 2)

Если начать ... {некоторые T-SQL здесь} ... конец Если начать ... { некоторые T-SQL здесь} ... end

Это один из способов добиться того, что, я думаю, вы просите.

Другой способ - создать SQL-задачу Execute для чтения значения параметра @parameter из базы данных в переменную SSIS. Затем вы можете создать две задачи Execute SQL Tasks - одну с каждой опцией для T-SQL в качестве свойства SQLStatement - и использовать выражения для прецедентных ограничений для определения выполняемой задачи Execute SQL.

Надеется, что это помогает, : {>

+0

Если (? = 1) начало ... {здесь несколько T-SQL} ... end If (? = 2) begin ... {несколько T-SQL здесь} ... end Над sql работает ?? Я получаю сообщение об ошибке «Невозможно разобрать». Стреляйте мне правильный синтаксис – user1810575

0

Вы не можете использовать Execute SQL Task для запуска операторов Transact-SQL.

Для установки условного SQL-заявления на основе того, чего вы пытаетесь достичь.

В Execute редактора SQL Task

  1. В общей вкладке, оставьте SQLStatement пустым.
  2. В параметре вкладке отображения, добавьте параметр и карту переменной User :: Параметр для Имя параметра 0.
  3. На вкладке Expression установите SQLStatementSource в

    (DT_NUMERIC, 18, 0) @ [User :: Параметр] == 1? ... query 1 ...: ... query 2 ...

Смежные вопросы