我正在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
我到底在做什么错?我似乎无法弄清楚。
这是我运行它时得到的。
答案 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