C'est une réponse à une version légèrement modifiée de votre question. Si vous pouvez abandonner l'utilisation d'une procédure stockée pour une fonction définie par l'utilisateur, vous pouvez utiliser une ligne de la table-valeur de la fonction définie par l'utilisateur. C'est essentiellement une procédure stockée (il faudra paramètres) qui retourne un tableau comme un ensemble de résultats; et donc une place bien avec une INTO.
Voici un bon rapide article sur elle et d'un autre utilisateur définie fonctions. Si vous avez encore besoin de conduire pour une procédure stockée, vous pouvez enrouler la table en ligne valeur de la fonction définie par l'utilisateur avec une procédure stockée. La procédure stockée juste passe les paramètres lors de l'appel, sélectionnez * à partir de la table en ligne valeur de la fonction définie par l'utilisateur.
Ainsi, par exemple, vous auriez une table en ligne valeur de la fonction définie par l'utilisateur pour obtenir une liste de clients pour une région en particulier:
CREATE FUNCTION CustomersByRegion
(
@RegionID int
)
RETURNS TABLE
AS
RETURN
SELECT *
FROM customers
WHERE RegionID = @RegionID
GO
Vous pouvez ensuite appeler cette fonction pour obtenir ce que vos résultats d'un exemple:
SELECT * FROM CustomersbyRegion(1)
Ou de faire un SELECT INTO:
SELECT * INTO CustList FROM CustomersbyRegion(1)
Si vous avez encore besoin d'une procédure stockée, puis les envelopper la fonction en tant que telle:
CREATE PROCEDURE uspCustomersByRegion
(
@regionID int
)
AS
BEGIN
SELECT * FROM CustomersbyRegion(@regionID);
END
GO
Je pense que c'est le plus "hack" méthode pour obtenir les résultats souhaités. Il utilise les fonctionnalités existantes comme ils étaient destinés à être utilisés sans complications supplémentaires. Par l'imbrication de la table en ligne valeur de la fonction définie par l'utilisateur dans la procédure stockée, vous avez accès à la fonctionnalité de deux façons. Plus! Vous n'avez qu'un seul point de l'entretien pour le code SQL.
L'utilisation de la fonction OPENROWSET a été suggéré, mais ce n'est pas ce que la fonction OPENROWSET était destiné à être utilisé pour (De Livres en Ligne):
Comprend toutes les informations de connexion
ce qui est requis pour accéder à des données distantes
à partir d'une source de données OLE DB. Cette
la méthode est une alternative à l'accès
les tables dans un serveur lié et est un
un temps, la méthode ad hoc de la connexion
et de l'accès à des données à l'aide de OLE
DB. Pour des références plus fréquentes à
Sources de données OLE DB, utilisez liés
les serveurs de la place.
À l'aide de la fonction OPENROWSET le travail sera fait, mais il va devoir assumer des charges supplémentaires pour l'ouverture de connexions locales et de l'ordonnancement de données. Il exige également une requête ad hoc de l'autorisation qui ne peut être désiré. Aussi, la fonction OPENROWSET approche aura pour effet d'empêcher l'utilisation de procédures stockées revenir plus d'un jeu de résultats. Habillage de plusieurs table en ligne de la valeur définie par l'utilisateur fonctions dans une seule procédure stockée peut atteindre cet objectif.