À l'aide d'une variable pour le nom de la table "à Partir de" clause dans SQL Server 2008
J'ai un UDF qui interroge les données d'une table. La table, cependant, doit être définissable en tant que paramètre. Par exemple je ne peut pas avoir:
Select * from [dbo].[TableA]
J'ai besoin de quelque chose comme:
Select * from [dbo].[@TableName]
La ligne ci-dessus ne fonctionne pas, et aussi l'UDF ne m'interdit de paramètre de la requête comme une chaîne de caractères et l'appel exec(). Je peux le faire dans une procédure, mais je ne peux pas appeler la procédure à partir de l'UDF soit.
Personne ne sait comment je peux faire cela au sein de l'UDF sans avoir une sorte de massif instruction switch?
- J'ai essayé de faire exactement la même chose l'autre jour, avec pas de chance. J'espère que quelqu'un sait!
Vous devez vous connecter pour publier un commentaire.
Ce ne peut pas être fait, SQL dynamique n'est pas prise en charge dans les fonctions de.
Voir ce DONC, la question:
L'exécution de SQL dynamique dans un SQLServer 2005
Vous pouvez l'UNION de TOUS vos tables et inclure le nom de la table comme une colonne, puis spécifiez le nom de la table comme un prédicat au cours de cette. Si vous consultez le plan de requête pour cet exemple, vous voyez que t2 n'est pas touché
Vous pouvez écrire une fonction clr qui peut faire du sql dynamique. J'ai eu à mettre en œuvre cette avant. C'est assez lisse.
Vous ne pouvez pas le faire. Quel problème à résoudre, il pourrait y avoir d'autres solutions.
Si vous donner plus de détails sur ce problème sous-jacent que vous essayez de résoudre, nous pourrions avoir de meilleures réponses. Une solution est de code à générer de l'Udf sur une table par table. Une autre consiste à utiliser le SQL dynamique à partir d'un SP. Ce qui est bon pour votre situation est difficile à dire.