返回多个表的过程

时间:2018-09-01 02:17:02

标签: sql sql-server

我正在SQL Server上学习SQL,并获得了AdventureWorks数据库。我开始编写一个过程,但是不知何故,它返回了无数个表,其中只有第一个表是正确的。

CREATE PROCEDURE SalesLT.Search
    @Name VARCHAR(40) = NULL
AS
BEGIN
    SELECT  
        Product.Name, ProductModel.Name AS ModelName, 
        ProductDescription.Description
    FROM 
        SalesLT.Product,  
        SalesLT.ProductModel,
        SalesLT.ProductDescription,
        SalesLT.ProductModelProductDescription
    WHERE 
        SalesLT.Product.ProductModelID = SalesLT.ProductModel.ProductModelID 
        AND SalesLT.Product.ProductModelID = SalesLT.ProductModelProductDescription.ProductModelID
        AND ProductModelProductDescription.ProductDescriptionID = SalesLT.ProductDescription.ProductDescriptionID
        AND Product.Name LIKE '%'+ISNULL(@Name,Product.Name)+'%'
END;

Execute SalesLT.Search

我到底在做什么错?我似乎无法弄清楚。

enter image description here

这是我运行它时得到的。

1 个答案:

答案 0 :(得分:1)

在存储过程的末尾放置GO。否则,您正在执行递归存储过程。 Execute SalesLT.Search成为存储过程的一部分。 GO是分隔符(请参阅https://docs.microsoft.com/en-us/sql/t-sql/language-elements/sql-server-utilities-statements-go?view=sql-server-2017

CREATE PROCEDURE SalesLT.Search
    @Name VARCHAR(40) = NULL
AS
BEGIN
Select Product.Name, ProductModel.Name AS ModelName, ProductDescription.Description
FROM SalesLT.Product, SalesLT.ProductModel,SalesLT.ProductDescription,SalesLT.ProductModelProductDescription
WHERE SalesLT.Product.ProductModelID=SalesLT.ProductModel.ProductModelID 
AND SalesLT.Product.ProductModelID = SalesLT.ProductModelProductDescription.ProductModelID
AND SalesLT.ProductModelProductDescription.ProductDescriptionID=SalesLT.ProductDescription.ProductDescriptionID
AND Product.Name LIKE '%'+ISNULL(@Name,Product.Name)+'%'
END;

GO

Execute SalesLT.Search