将存储过程中使用的逻辑传递给调用的C#应用程序
我有一个从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
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
此解决方案可防止对结果集进行更改,并且如果始终显式命名过程参数,则不应影响任何代码。此外,与“添加列”选项相比,您还可以通过连接获得更少数据的额外好处。在同一时间获得完全相同的答案。。。令人印象深刻。在同一时间给出了完全相同的答案。。。给人印象深刻的