【问题标题】:Handling foreign keys in T-SQL select stored procedure?在 T-SQL 选择存储过程中处理外键?
【发布时间】:2016-11-07 15:26:13
【问题描述】:

我正在编写存储过程来根据给定的 id 获取数据,这一切都很好,但是有些列是外键,我需要的是它们的值。如何在存储过程中完成所有这些操作?

作为参考,我将使用 ASP.NET(还没学过)来调用这些存储过程并更新网站。

例如,在 AdventureWorks 数据库中:

CREATE PROCEDURE spLoadProduct
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 
        [ProductID], [Name],
        [ProductCategoryID], [ProductModelID]
    FROM 
        [SalesLT].[Product]
END

Screenshot of current SP result

我想要的是最后两列返回实际的类别和型号名称,而不是外键。标准做法是像我尝试的那样在一个存储过程中完成所有操作吗?

【问题讨论】:

  • 谷歌SQL Server Joins.

标签: asp.net sql-server tsql stored-procedures


【解决方案1】:

也许我误解了您的问题,但您可以在存储过程中包含联接。

如果你有 afkey 链接到表 2 的示例

表_1:表_2: id name afkey akey otherinfo 1 弗雷德 1 1 信息 2 乔恩 2 2 其他 3 艾比 3 3 更多信息

如果要显示 otherinfo 列而不是 afkey 外键

你可以:

create PROCEDURE spLoad
AS
    BEGIN
        SET NOCOUNT ON;
        SELECT NAME, OTHERINFO
        FROM TABLE_1
        INNER JOIN TABLE_2 
        ON TABLE_1.afkey = TABLE_2.akey
    END

【讨论】:

    【解决方案2】:

    您可以使用 INNER JOIN 将父表连接到子表。在这种情况下,子表是 ProductCategory 和 ProductModel。

    CREATE PROCEDURE spLoadProduct 
    AS
    BEGIN
    
        SELECT
            p.ProductID
            , p.Name
            , p.ProductCategoryID
            , p.ProductModelID
            , ProductCategoryName = pc.Name
            , ProductModelName = pm.Name
        FROM 
            SalesLT.Product p
            INNER JOIN SalesLT.ProductCategory pc ON p.ProductCategoryID = pc.ProductCategoryID
            INNER JOIN SalesLT.ProductModel pm ON p.ProductModelID = pm.ProductModelID;
    
    END
    

    内连接教程:http://www.w3schools.com/sql/sql_join_inner.asp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-07
      • 2018-10-03
      • 2013-05-28
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      相关资源
      最近更新 更多