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

标签 c# tsql stored-procedures

我有一个从 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 语句中的哪一个?

最佳答案

添加另一列是错误的做法 - 特别是对于较大的结果集。您会通过用一次性值污染每条记录来增加网络数据。

也就是说,我建议一个可选的 output parameter对于您的存储过程:

@branchId int = null output

然后在你的逻辑 block 中设置它:

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

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

关于c# - 将存储过程中使用的逻辑传达给调用 C# 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151592/

相关文章:

c# - WinRT 中的 ICMP Ping - 这可能吗?

c# - 将 gridview 导出到 Excel 时无法识别阿拉伯字符

java - 如何检查 hibernate 更新是否完成?

mysql - 大型表上的 SP 调用期间遇到错误 2013

c# - “标准化”概率数组

sql-server - 回滚语句中的选择查询是否存储在日志中?

sql-server - SQL Server 存储过程可以确定其父过程的名称吗?

sql - 不明确的列名错误,如何修复?

来自参数或变量的 SQL WHERE IN

c# - C# 中的 Apple 推送通知服务器端