SQL Server 2008 - Come faccio a restituire un tipo definito dall'utente Tavolo da una funzione con valori di tabella?
Domanda
Ecco la mia definito dall'utente tipo di tabella ...
CREATE TYPE [dbo].[FooType] AS TABLE(
[Bar] [INT],
)
Questo è ciò che Ive ha avuto a che fare nella mia funzione con valori di tabella per restituire il tipo:
CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes TABLE ([Bar] [INT])
INSERT INTO @FooTypes (1)
RETURN
In sostanza, im dover ri-dichiarare la mia definizione di tipo nella dichiarazione di ritorno della funzione. Isnt c'è un modo posso semplicemente dichiarare il tipo nella dichiarazione RETURN?
avrei pensato questo dovrebbe funzionare:
CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes [FooType]
INSERT INTO @FooTypes (1)
RETURN
Non riesci a trovare alcun aiuto su MSDN / Google riguardo a questa .... qualcuno?
Modifica
I non marcato la mia risposta, e urtando questa domanda -. Come sto incontrando lo stesso scenario 6 mesi più tardi
Qualcuno ha qualche idea se è possibile restituire un utente definito tipo di tabella da una funzione con valori di tabella? In caso contrario, c'è una soluzione migliore di diverso da ciò che ho fatto? (Ri-dichiarare ancora una volta il tipo).
Soluzione 2
Ok - in modo che cant essere fatto.
Facile abbastanza per duplicare la definizione della tabella nel tipo di ritorno (con l'uso di scripting).
Ancora -. Speriamo che questo problema viene risolto nella prossima versione di SQL Server
Altri suggerimenti
Anche se non è possibile restituire l'UDTT da una funzione, è possibile restituire una variabile di tabella e riceverlo in un UDTT fino a quando la partita dello schema . Il seguente codice viene testato in SQL Server 2008 R2
- Creare l'UDTT
CREATE TYPE dbo.MyCustomUDDT AS TABLE
(
FieldOne varchar (512),
FieldTwo varchar(1024)
)
- dichiarare le variabili
DECLARE @uddt MyCustomUDDT;
DECLARE @Modifieduddt MyCustomUDDT;
// Chiamare la funzione
INSERT INTO @Modifieduddt SELECT * FROM dbo.MyUDF(@uddt);
firma Funzione
CREATE FUNCTION dbo.MyUDF(@localUDDT MyCustomUDDT)
RETURNS @tableVar TABLE
(
FieldOne varchar (512),
FieldTwo varchar(1024)
)
AS
BEGIN
--Modify your variable here
RETURN
END
Speriamo che questo vi aiuterà qualcuno.
La sintassi per CREATE FUNCTION indica che l'unico modo per definire un tipo di tabella di ritorno è da colonne e tipi di sfogliare, un <table_type_definition>
. Anche SQL Server "Denali" ha la stessa definizione di <table_type_definition>
. Anche se stranamente, di sintassi non include valori di tabella funzioni multi-economico, o qualsiasi altra cosa che i riferimenti questo frammento.
Non credo che questo sia possibile. Non è possibile utilizzare un UDTT come tipo di ritorno di una funzione scalare con valori perché non è un valore scalare. Non è inoltre possibile sostituire la dichiarazione di tabella di una funzione con valori di tabella con un UDTT. Ripetendo la definizione della tabella sembra essere l'unica opzione. Se abbiamo capito il motivo per cui si stavano facendo questo, forse, siamo riusciti a trovare un'alternativa.