consideri la creazione di una funzione che può restituire un tavolo e possono essere usate in una query.
https://msdn.microsoft.com/en-us/library/ms186755.aspx
La differenza principale tra una funzione e una procedura è che una funzione non modifica alcuna tabella. Restituisce solo un valore.
In questo esempio sto creando una query per darmi i conteggi di tutte le colonne in una data tabella che non sono nulle o vuote.
Ci sono probabilmente molti modi per ripulirlo. Ma illustra bene una funzione.
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
poi eseguire la funzione con
SELECT * FROM usp_listFields('Employees')
produce un numero di righe come:
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
vi consiglio di vedere la soluzione [** questa **] (http://stackoverflow.com/questions/5604927/how-to-return-a-table-from-stored-procedure) pure. Uno penserebbe intuitivamente che non funzionerebbe, ma lo fa, rendendolo il modo più semplice per farlo. – Veverke