Voici mon type de table défini par l'utilisateur ...
CREATE TYPE [dbo].[FooType] AS TABLE(
[Bar] [INT],
)
C'est ce que ive devait faire dans ma fonction table pour retourner le type:
CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes TABLE ([Bar] [INT])
INSERT INTO @FooTypes (1)
RETURN
Fondamentalement, je dois déclarer à nouveau ma définition de type dans l'instruction RETURN de la fonction. N'y a-t-il pas un moyen de déclarer simplement le type dans l'instruction RETURN?
J'aurais pensé que cela fonctionnerait:
CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes [FooType]
INSERT INTO @FooTypes (1)
RETURN
Vous ne trouvez aucune aide sur MSDN/Google à ce sujet ... quelqu'un?
MODIFIER
J'ai décoché ma réponse et j'ai heurté cette question - car je rencontre le même scénario 6 mois plus tard.
Quelqu'un a-t-il une idée s'il est possible de renvoyer un type de table défini par l'utilisateur à partir d'une fonction de valeur de table? Sinon, existe-t-il une meilleure solution de contournement autre que ce que j'ai fait? (déclarez à nouveau le type).
Ok - donc ça ne peut pas être fait.
Assez facile pour dupliquer la définition de table dans le type de retour (avec l'utilisation de scripts).
Nous espérons que ce problème sera corrigé dans la prochaine version de SQL Server.
Même si vous ne pouvez pas retourner l'UDTT à partir d'une fonction, vous pouvez renvoyer une variable de table et la recevoir dans un UDTT tant que le schéma correspond. Le code suivant est testé dans SQL Server 2008 R2
- Créer l'UDTT
CREATE TYPE dbo.MyCustomUDDT AS TABLE
(
FieldOne varchar (512),
FieldTwo varchar(1024)
)
- Déclarez vos variables
DECLARE @uddt MyCustomUDDT;
DECLARE @Modifieduddt MyCustomUDDT;
// Appelle la fonction
INSERT INTO @Modifieduddt SELECT * FROM dbo.MyUDF(@uddt);
Signature de fonction
CREATE FUNCTION dbo.MyUDF(@localUDDT MyCustomUDDT)
RETURNS @tableVar TABLE
(
FieldOne varchar (512),
FieldTwo varchar(1024)
)
AS
BEGIN
--Modify your variable here
RETURN
END
J'espère que cela aidera quelqu'un.
La syntaxe pour CREATE FUNCTION indique que la seule façon de définir un type de retour de table est de répertorier les colonnes et les types, un <table_type_definition>
. Même SQL Server "Denali" a la même définition pour <table_type_definition>
. Bien qu'étrangement, sa syntaxe n'inclut pas les fonctions de valeur Table multi-instructions, ni rien d'autre qui fasse référence à ce fragment.
Je ne pense pas que ce soit possible. Vous ne pouvez pas utiliser un UDTT comme type de retour d'une fonction à valeurs scalaires car ce n'est pas une valeur scalaire. Vous ne pouvez pas non plus remplacer la déclaration de table d'une fonction table par un UDTT. La répétition de la définition du tableau semble être la seule option. Si nous savions pourquoi vous faisiez cela, nous pourrions peut-être trouver une alternative.