我有一个从 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/