我有一个从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#app执行了哪两个SELECT语句?
答案 0 :(得分:5)
添加另一列是错误的方法 - 特别是使用更大的结果集。您通过使用应该是一次性值的每一条记录污染来增加数据。
也就是说,我建议您为存储过程选择output parameter:
@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
此解决方案可防止更改结果集,并且只要始终明确命名过程参数,就不应影响任何代码。此外,与添加列选项相比,您可以通过线路获得更少数据的额外好处。
答案 1 :(得分:4)
您可以在存储过程中使用输出参数,并使用它来决定文本文件的名称。有关详细信息,请参阅以下链接;
http://www.daniweb.com/software-development/csharp/threads/110318
答案 2 :(得分:3)
IF x=y
SELECT colX, colY, 'case1' as WhichBranch
FROM TableA
ELSE
SELECT colX, colY, 'case2' as WhichBranch
FROM TableA
WHERE colX > 100
答案 3 :(得分:3)
你可以这样做:
IF x=y
SELECT colX, colY, 'Method1' as method
FROM TableA
ELSE
SELECT colX,colY, 'Method2' as method
FROM TableA
WHERE colX > 100
答案 4 :(得分:2)
像这样扩展存储过程:
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