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

将存储过程中使用的逻辑传递给调用的C#应用程序,c#,tsql,stored-procedures,C#,Tsql,Stored Procedures,我有一个从C#应用程序调用的存储过程。此存储过程有两个互斥的代码路径;它们都返回类似类型的记录,如下所示: IF x=y SELECT colX, colY FROM TableA ELSE SELECT colX,colY FROM TableA WHERE colX > 100 IF x=y SELECT colX, colY, 'Method1' as method FROM TableA ELSE SELECT colX,colY, 'Method

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

IF x=y
  SELECT colX, colY
  FROM TableA
ELSE
  SELECT colX,colY
  FROM TableA
  WHERE colX > 100
IF x=y
  SELECT colX, colY, 'Method1' as method
  FROM TableA
ELSE
  SELECT colX,colY, 'Method2' as method
  FROM TableA
  WHERE colX > 100
手头的任务包括将sp调用的结果写入文本文件;文件名取决于执行了两个SELECT中的哪一个。名称将为MyTextFile.txt或MyTextFileGT100.txt


如何告诉C#app执行了两条SELECT语句中的哪一条?

您可以这样做:

IF x=y
  SELECT colX, colY
  FROM TableA
ELSE
  SELECT colX,colY
  FROM TableA
  WHERE colX > 100
IF x=y
  SELECT colX, colY, 'case1' as WhichBranch
  FROM TableA
ELSE
  SELECT colX, colY, 'case2' as WhichBranch
  FROM TableA
  WHERE colX > 100
IF x=y
  SELECT colX, colY, 'Method1' as method
  FROM TableA
ELSE
  SELECT colX,colY, 'Method2' as method
  FROM TableA
  WHERE colX > 100

你可以这样做:

IF x=y
  SELECT colX, colY
  FROM TableA
ELSE
  SELECT colX,colY
  FROM TableA
  WHERE colX > 100
IF x=y
  SELECT colX, colY, 'Method1' as method
  FROM TableA
ELSE
  SELECT colX,colY, 'Method2' as method
  FROM TableA
  WHERE colX > 100

像这样扩展存储过程:

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

像这样扩展存储过程:

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

您可以在存储的进程中使用输出参数,并使用该参数确定文本文件的名称。更多信息请参见下面的链接


您可以在存储的进程中使用输出参数,并使用该参数确定文本文件的名称。更多信息请参见下面的链接


添加另一列是错误的做法-尤其是对于较大的结果集。您将通过使用本应为一次性值的内容来污染每一条记录,从而通过网络增加数据

也就是说,我建议为您的存储过程提供一个可选选项:

@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

此解决方案可防止对结果集进行更改,并且如果始终显式命名过程参数,则不应影响任何代码。此外,与“添加列”选项相比,您还可以通过连接获得更少数据的额外好处。

添加另一列是错误的做法-尤其是对于较大的结果集。您将通过使用本应为一次性值的内容来污染每一条记录,从而通过网络增加数据

也就是说,我建议为您的存储过程提供一个可选选项:

@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

此解决方案可防止对结果集进行更改,并且如果始终显式命名过程参数,则不应影响任何代码。此外,与“添加列”选项相比,您还可以通过连接获得更少数据的额外好处。

在同一时间获得完全相同的答案。。。令人印象深刻。在同一时间给出了完全相同的答案。。。给人印象深刻的