gpt4 book ai didi

c# - SQL 服务器 : return the result of a select as a result of stored procedure execution

转载 作者:行者123 更新时间:2023-11-30 20:30:33 25 4
gpt4 key购买 nike

我有一个从 C# 调用的存储过程:

CREATE PROCEDURE [MySP] 
@ID int,
@Exists bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;

SET @Exists = 0

SELECT TOP 1 ID
FROM MyTable
WHERE ID = @ID

IF @@ROWCOUNT = 0
BEGIN
SELECT b.*
FROM AnotherTable b
INNER JOIN AnotherTable2 c ON b.ID = c.ID
WHERE b.ID = @ID
END
ELSE
BEGIN
SET @Exists = 1

SELECT TOP 0 NULL
END
END

如果 @ID 不存在于表 MyTable 中,那么我返回 SELECT b.*,否则如果 @ID 存在于表中,那么我不返回任何行

问题是当表中存在@ID时,存储过程将两个表作为结果返回给C#,一个来自SELECT TOP 1,另一个来自SELECT TOP 1来自 SELECT b.* 并且我只想返回 SELECT b.* 那么我该怎么做呢?

最佳答案

只需将所有逻辑替换为:

SELECT b.*
From AnotherTable b INNER JOIN
AnotherTable2 c
ON b.ID = c.ID
WHERE b.ID = @ID AND
NOT EXISTS (SELECT 1 FROM MyTable WHERE ID = @ID);

而且,如果你不想重复,你也可以这样做:

SELECT b.*
From AnotherTable b
WHERE b.ID = @ID AND
EXISTS (SELECT 1 FROM AnotherTable2 c WHERE b.ID = c.ID) AND
NOT EXISTS (SELECT 1 FROM MyTable WHERE ID = @ID);

然后,了解表值函数。如果您想返回一个表,那么最好的方法——如果可行的话——是一个函数,而不是一个存储过程。(函数在功能上更受限制,所以这并不总是可行的。)

关于c# - SQL 服务器 : return the result of a select as a result of stored procedure execution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44590819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com