Передайте логику, используемую в хранимой процедуре, вызывающему приложению C # - PullRequest
1 голос
/ 22 августа 2011

У меня есть хранимая процедура, вызываемая из приложения C #.Эта хранимая процедура имеет два взаимоисключающих пути кода;Они оба возвращают записи одинакового типа, например:

IF x=y
  SELECT colX, colY
  FROM TableA
ELSE
  SELECT colX,colY
  FROM TableA
  WHERE colX > 100

Задача под рукой заключается в записи результата вызова sp в текстовый файл;Имя файла зависит от того, какой из двух SELECT был выполнен.Имя будет MyTextFile.txt или MyTextFileGT100.txt

Как мне сообщить приложению C #, какой из двух операторов SELECT был выполнен?

Ответы [ 5 ]

5 голосов
/ 22 августа 2011

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

Тем не менее, я бы предложил дополнительный выходной параметр для вашей сохраненной записи.процедура:

@branchId int = null output

Затем установите его в логических блоках:

if x=y begin

  set @branchId = 1

  SELECT colX, colY
  FROM TableA

end else begin

  set @branchId = 2

  SELECT colX,colY
  FROM TableA
  WHERE colX > 100

end

Это решение предотвращает изменения в ваших наборах результатов и, при условии, что вы всегда явно называете параметры процедуры, не долженне влияет на любой код.Кроме того, вы получаете дополнительное преимущество в виде меньшего количества данных по сети, чем опция добавить столбец .

4 голосов
/ 22 августа 2011

Вы можете использовать выходной параметр в хранимой процедуре и использовать его для определения имени текстового файла. См. Ссылки ниже для получения дополнительной информации;

http://www.daniweb.com/software-development/csharp/threads/110318

Получить значение выходного параметра в ADO.NET

3 голосов
/ 22 августа 2011
IF x=y
  SELECT colX, colY, 'case1' as WhichBranch
  FROM TableA
ELSE
  SELECT colX, colY, 'case2' as WhichBranch
  FROM TableA
  WHERE colX > 100
3 голосов
/ 22 августа 2011

Вы можете сделать что-то вроде этого:

IF x=y
  SELECT colX, colY, 'Method1' as method
  FROM TableA
ELSE
  SELECT colX,colY, 'Method2' as method
  FROM TableA
  WHERE colX > 100
2 голосов
/ 22 августа 2011

Расширьте хранимую процедуру следующим образом:

IF x=y
  SELECT colX, colY, 'MyTextFile.txt' AS FN
  FROM TableA
ELSE
  SELECT colX,colY, 'MyTextFileGT100.txt' AS FN
  FROM TableA
  WHERE colX > 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...