帮助SQL存储过程

时间:2010-12-21 11:31:10

标签: sql stored-procedures

我需要一些SQL存储过程的帮助,我没有很多经验。 我有一个表“dbo.Lookup_Country”。它包含3个字段:ID,Name,Code。 现在我编写了一个存储过程,通过Code检索国家名称。

Select Name from Lookup_Country where Code = @Code

我需要调整存储过程,以便如果有0个结果,则必须通过ID搜索来查看是否有结果:

从Lookup_Country中选择名称,其中Id = @Code

所以基本上我需要某种'IF'结构:

if (Select Name from Lookup_Country where Code = @Code) == 0 results
      Select Name from Lookup_Country where Id = @Code

这可能吗?

THX

感谢所有人,我用过这个:

DECLARE @Name nvarchar(50)

-- Insert statements for procedure here
SET @Name = (SELECT Name from dbo.Lookup_Country WHERE Code = @CODE)
IF @Name != ''
    SELECT Name from dbo.Lookup_Country WHERE Code = @CODE
ELSE
    SELECT Name from dbo.Lookup_Country WHERE ID = @CODE

4 个答案:

答案 0 :(得分:4)

对此没有一种非常优雅的方式......

SELECT Name 
INTO #foo
from Lookup_Country where Code = @Code
IF @@ROWCOUNT <> 0
   SELECT Name  FROM #foo
ELSE
   Select Name from Lookup_Country where Id = @Code

无论您使用表变量还是计数,都无关紧要

或者你有这个结构,也许有一个聚合

SELECT TOP 1
    Name
FROM
    (
    Select Name, 0 AS Precedence from Lookup_Country where Code = @Code
    UNION ALL
    Select Name, 1 AS Precedence from Lookup_Country where Id = @Code
    ) foo
ORDER BY
    Precedence 

如果您在输出中包含优先顺序,则可以获得有关 的信息

的信息。

答案 1 :(得分:2)

将第一个选择的结果放入一个变量,然后你可以对该结果进行计数,如果为零,那么你将按id进行搜索。

要了解有关如何使用if语句的更多信息,请查看本文,如果您使用的是SQL Server,但是,如果您使用的是其他数据库,则逻辑仍会应用if语法可能不同。

http://msdn.microsoft.com/en-us/library/ms182587.aspx

答案 2 :(得分:0)

对你有帮助吗?

 Select Name from Lookup_Country where (Code = @Code OR Id = @Code)

答案 3 :(得分:0)

您可以使用or

Select Name from Lookup_Country where Code = @Code or Id = @Code