valores una tipos tipo temporales tablas tabla puedo partir obtener nombre modificar mes linea funciones español crear consulta con columna cambiar sql-server tsql sql-server-2008 user-defined-functions user-defined-types

tipos - SQL Server 2008-¿Cómo devuelvo un tipo de tabla definida por el usuario a partir de una función con valores de tabla?



tablas temporales vs variables tipo tabla sql server (5)

Aunque no puede devolver el UDTT desde una función, puede devolver una variable de tabla y recibirla en un UDTT siempre que el esquema coincida . El siguiente código se prueba en SQL Server 2008 R2

- Crea el UDTT

CREATE TYPE dbo.MyCustomUDDT AS TABLE ( FieldOne varchar (512), FieldTwo varchar(1024) )

- Declara tus variables

DECLARE @uddt MyCustomUDDT; DECLARE @Modifieduddt MyCustomUDDT;

// Llamar a la función

INSERT INTO @Modifieduddt SELECT * FROM dbo.MyUDF(@uddt);

Firma de la función

CREATE FUNCTION dbo.MyUDF(@localUDDT MyCustomUDDT) RETURNS @tableVar TABLE ( FieldOne varchar (512), FieldTwo varchar(1024) ) AS BEGIN --Modify your variable here RETURN END

Espero que esto ayude a alguien.

Aquí está mi tipo de tabla definida por el usuario ...

CREATE TYPE [dbo].[FooType] AS TABLE( [Bar] [INT], )

Esto es lo que he tenido que hacer en mi función de valores de tabla para devolver el tipo:

CREATE FUNCTION [dbo].[GetFoos] RETURN @FooTypes TABLE ([Bar] [INT]) INSERT INTO @FooTypes (1) RETURN

Básicamente, tengo que volver a declarar mi definición de tipo en la declaración RETURN de la función. ¿No hay una manera en que puedo simplemente declarar el tipo en la declaración RETURN?

Pensé que esto funcionaría:

CREATE FUNCTION [dbo].[GetFoos] RETURN @FooTypes [FooType] INSERT INTO @FooTypes (1) RETURN

No se puede encontrar ayuda en MSDN / Google con respecto a esto ... ¿alguien?

EDITAR

Desmarqué mi respuesta y choqué con esta pregunta, ya que me encuentro con el mismo escenario 6 meses después.

¿Alguien tiene alguna idea de si es posible devolver un tipo de tabla definido por el usuario a partir de una función con valores de tabla? Si no, ¿hay una solución mejor que no sea la que he hecho? (vuelve a declarar el tipo de nuevo).


La sintaxis de CREATE FUNCTION indica que la única forma de definir un tipo de retorno de tabla es enumerando columnas y tipos, a <table_type_definition> . Incluso SQL Server "Denali" tiene la misma definición para <table_type_definition> . Aunque, curiosamente, su sintaxis no incluye funciones valoradas en la tabla de declaraciones múltiples, o cualquier otra cosa que haga referencia a este fragmento.


No creo que esto sea posible. No puede usar un UDTT como el tipo de retorno de una función de valor escalar porque no es un valor escalar. Tampoco puede reemplazar la declaración de tabla de una función con valores de tabla con un UDTT. La repetición de la definición de la tabla parece ser la única opción. Si supiéramos por qué estabas haciendo esto, tal vez podríamos encontrar una alternativa.


No, miedo no en este momento, según esta pregunta . Y lo siguiente de msdn:

Restricciones

Los parámetros con valores de tabla tienen las siguientes restricciones:

  • SQL Server no mantiene estadísticas en columnas de parámetros con valores de tabla.

  • Los parámetros con valores de tabla se deben pasar como parámetros de entrada de READONLY a las rutinas de Transact-SQL. No puede realizar operaciones DML como ACTUALIZAR, ELIMINAR o INSERTAR en un parámetro con valores de tabla en el cuerpo de una rutina.

  • No puede usar un parámetro con valores de tabla como destino de una instrucción SELECT INTO o INSERT EXEC. Un parámetro con valores de tabla puede estar en la cláusula FROM de SELECT INTO o en la secuencia INSERT EXEC o stored-procedure.


Ok, entonces no se puede hacer.

Es lo suficientemente fácil como para duplicar la definición de la tabla en el tipo de devolución (con el uso de scripts).

Aún así, espero que este problema se solucione en la próxima versión de SQL Server.