xem xét việc tạo ra một chức năng mà có thể trả về một bảng và được sử dụng trong một truy vấn.
https://msdn.microsoft.com/en-us/library/ms186755.aspx
Sự khác biệt chính giữa một hàm và thủ tục là một chức năng làm cho không có thay đổi bất kỳ bảng. Nó chỉ trả về một giá trị.
Trong ví dụ này, tôi tạo truy vấn để cung cấp cho tôi tổng số của tất cả các cột trong bảng đã cho không rỗng hoặc trống.
Có thể có nhiều cách để làm sạch điều này. Nhưng nó minh họa một chức năng tốt.
USE Northwind
CREATE FUNCTION usp_listFields(@schema VARCHAR(50), @table VARCHAR(50))
RETURNS @query TABLE (
FieldName VARCHAR(255)
)
BEGIN
INSERT @query
SELECT
'SELECT ''' + @table+'~'+RTRIM(COLUMN_NAME)+'~''+CONVERT(VARCHAR, COUNT(*)) '+
'FROM '[email protected]+'.'[email protected]+' '+
' WHERE isnull("'+RTRIM(COLUMN_NAME)+'",'''')<>'''' UNION'
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @table and TABLE_SCHEMA = @schema
RETURN
END
Sau đó, thực hiện các chức năng với
SELECT * FROM usp_listFields('Employees')
sản xuất một số hàng như:
SELECT 'Employees~EmployeeID~'+CONVERT(VARCHAR, COUNT(*)) FROM dbo.Employees WHERE isnull("EmployeeID",'')<>'' UNION
SELECT 'Employees~LastName~'+CONVERT(VARCHAR, COUNT(*)) FROM dbo.Employees WHERE isnull("LastName",'')<>'' UNION
SELECT 'Employees~FirstName~'+CONVERT(VARCHAR, COUNT(*)) FROM dbo.Employees WHERE isnull("FirstName",'')<>'' UNION
Tôi khuyên bạn nên xem giải pháp [** this **] (http://stackoverflow.com/questions/5604927/how-to-return-a-table-from-stored-procedure). Người ta sẽ trực giác nghĩ rằng nó sẽ không hoạt động, nhưng nó làm, làm cho nó là cách đơn giản nhất để làm điều này. – Veverke