将存储过程中使用的逻辑传递给调用C#应用程序

FMF*_*MFF 1 c# t-sql stored-procedures

我有一个从C#应用程序调用的存储过程.该存储过程具有两个互斥的代码路径; 它们都返回相似类型的记录,如下所示:

IF x=y
  SELECT colX, colY
  FROM TableA
ELSE
  SELECT colX,colY
  FROM TableA
  WHERE colX > 100
Run Code Online (Sandbox Code Playgroud)

手头的任务涉及在文本文件中写入sp调用的结果; 文件名取决于执行两个SELECT中的哪一个.名称将是MyTextFile.txt或MyTextFileGT100.txt

如何告诉C#app执行了哪两个SELECT语句?

I a*_*ica 5

添加另一列是错误的方法 - 特别是使用更大的结果集.您将通过使用应该是一次性值来污染每个记录来增加数据.

也就是说,我建议您的存储过程的可选输出参数:

@branchId int = null output
Run Code Online (Sandbox Code Playgroud)

然后在逻辑块中设置它:

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
Run Code Online (Sandbox Code Playgroud)

此解决方案可防止更改结果集,并且只要始终明确指定过程参数,则不应影响任何代码.此外,与添加列选项相比,您可以获得更少的数据通过线路获得的额外好处.