我正在编写存储过程以根据给定的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
我想要的是最后两列返回实际的类别和型号名称,而不是外键。标准做法是在我尝试的一个存储过程中完成所有操作吗?
答案 0 :(得分:0)
也许我误解了您的问题,但您可以在存储过程中包含联接。
示例,如果您有afkey链接到表2的位置
Table_1: Table_2: id name afkey akey otherinfo 1 fred 1 1 info 2 jon 2 2 other 3 abbie 3 3 more info
如果要显示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
答案 1 :(得分:0)
您可以使用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