Một vài ví dụ để cho thấy, chỉ trong trường hợp:Multi-tuyên bố Bảng Quý Chức năng vs Inline Bảng Function Quý
Inline Bảng Quý
CREATE FUNCTION MyNS.GetUnshippedOrders()
RETURNS TABLE
AS
RETURN SELECT a.SaleId, a.CustomerID, b.Qty
FROM Sales.Sales a INNER JOIN Sales.SaleDetail b
ON a.SaleId = b.SaleId
INNER JOIN Production.Product c ON b.ProductID = c.ProductID
WHERE a.ShipDate IS NULL
GO
đa Statement Bảng Quý
CREATE FUNCTION MyNS.GetLastShipped(@CustomerID INT)
RETURNS @CustomerOrder TABLE
(SaleOrderID INT NOT NULL,
CustomerID INT NOT NULL,
OrderDate DATETIME NOT NULL,
OrderQty INT NOT NULL)
AS
BEGIN
DECLARE @MaxDate DATETIME
SELECT @MaxDate = MAX(OrderDate)
FROM Sales.SalesOrderHeader
WHERE CustomerID = @CustomerID
INSERT @CustomerOrder
SELECT a.SalesOrderID, a.CustomerID, a.OrderDate, b.OrderQty
FROM Sales.SalesOrderHeader a INNER JOIN Sales.SalesOrderHeader b
ON a.SalesOrderID = b.SalesOrderID
INNER JOIN Production.Product c ON b.ProductID = c.ProductID
WHERE a.OrderDate = @MaxDate
AND a.CustomerID = @CustomerID
RETURN
END
GO
Có lợi thế nào khi sử dụng một loại (tuyên bố nội dòng hoặc đa) trên othe r? Có những tình huống nào đó khi một người tốt hơn người kia hay là sự khác biệt hoàn toàn là cú pháp? Tôi nhận ra hai ví dụ truy vấn đang làm những việc khác nhau nhưng có một lý do tôi sẽ viết chúng theo cách đó?
Đọc về chúng và những lợi thế/khác biệt chưa thực sự được giải thích.
Ngoài ra một trong những lợi ích rất lớn của hàm inline là bạn có thể chọn ROWID cột (TIMESTAMP), trong khi bạn không thể chèn dữ liệu dấu thời gian vào bảng trở lại trong chức năng multistatement! – Artru
Cảm ơn một chủ đề tuyệt vời. Tôi đã học được rất nhiều. Tuy nhiên, một điều cần lưu ý là khi ALTERing một chức năng ITV đến MSTV, profiler cho rằng bạn đang thay đổi một ITV. Không có vấn đề gì bạn làm để có được cú pháp ngay từ quan điểm của MSTV, việc biên dịch lại luôn thất bại, thường là xung quanh câu lệnh đầu tiên sau BEGIN. Cách duy nhất xung quanh điều này là để DROP chức năng cũ và TẠO cái mới như một MSTV. – Fandango68