Variable as Table

09/11/2004 - 18:27 por Pablodegerli | Informe spam
Hola amigos, tengo lo siguiente

create table #Pos(Id_Ubicacion int)
Insert into #Pos Exec SpUbicacionSimple

funciona de maravilla, pero si quiero usar tabla temporales en memoria

declare @Pos Table(Id_Ubicacion int)
Insert into @Pos Exec SpUbicacionSimple

Servidor: mensaje 197, nivel 15, estado 1, procedimiento SpUbicacion,
línea 22
No se puede utilizar la instrucción EXECUTE como origen al insertar en
una variable de tabla.

Entonces como puedo insertar el resultado del store en la tabla temporal en
memoria

Como siempre, gracias de antemano

Preguntas similare

Leer las respuestas

#6 ulises
09/11/2004 - 20:20 | Informe spam
Esa es una de las restricciones del tipo de datos TABLE no
puede usarse ni con INSERT INTO ni con SELECT ..INTO, vas a
tener que seguir usando la tabla temporal.

Saludos,
Ulises

Hola amigos, tengo lo siguiente

create table #Pos(Id_Ubicacion int)
Insert into #Pos Exec SpUbicacionSimple

funciona de maravilla, pero si quiero usar tabla


temporales en memoria

declare @Pos Table(Id_Ubicacion int)
Insert into @Pos Exec SpUbicacionSimple

Servidor: mensaje 197, nivel 15, estado 1,


procedimiento SpUbicacion,
línea 22
No se puede utilizar la instrucción EXECUTE como


origen al insertar en
una variable de tabla.

Entonces como puedo insertar el resultado del store en la


tabla temporal en
memoria

Como siempre, gracias de antemano


.

Respuesta Responder a este mensaje
#7 Pablodegerli
10/11/2004 - 17:22 | Informe spam
pero si dice que no puede utilizarse esa instruccion?

"Maxi" escribió en el mensaje
news:
si, con insert into


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Pablodegerli" escribió en el mensaje
news:
> Entonces no tengo forma de almacenar el resultado directamente en la
> variable table?
>
>> Como excepciones, table no puede utilizarse en las siguientes
> instrucciones:
>>
>> INSERT INTO table_variable EXEC stored_procedure
>>
>> SELECT select_list INTO table_variable statements.
>
>
>
> "Maxi" escribió en el mensaje
> news:%
>> Hola, es que las tablas en memoria se declaran con Table
>>
>> table
>> Un tipo especial de datos que puede utilizarse para almacenar un


conjunto
> de
>> resultados y procesarlo más adelante. Su uso principal es el
> almacenamiento
>> temporal de un conjunto de filas, que se van a devolver como el


conjunto
> de
>> resultados de una función valorada en tabla.
>>
>> Sintaxis
>>
>>
>> Nota Utilice DECLARE @local_variable para declarar variables de tipo
> table.
>>
>>
>> table_type_definition ::> >> TABLE ( { column_definition | table_constraint } [ ,...n ] )
>>
>> column_definition ::> >> column_name scalar_data_type
>> [ COLLATE collation_definition ]
>> [ [ DEFAULT constant_expression ] | IDENTITY [ ( seed,
>> increment ) ] ]
>> [ ROWGUIDCOL ]
>> [ column_constraint ] [ ...n ]
>>
>> column_constraint ::> >> { [ NULL | NOT NULL ]
>> | [ PRIMARY KEY | UNIQUE ]
>> | CHECK ( logical_expression )
>> }
>>
>> table_constraint ::> >> { { PRIMARY KEY | UNIQUE } ( column_name [ ,...n ] )
>> | CHECK ( search_condition )
>> }
>>
>> Argumentos
>> table_type_definition
>>
>> Es el mismo subconjunto de información que se utiliza para definir una
> tabla
>> en CREATE TABLE. La declaración de tabla incluye definiciones de


columna,
>> nombres, tipos de datos y restricciones. Sólo se permiten los tipos de
>> restricciones PRIMARY KEY, UNIQUE KEY y NULL.
>>
>> Para obtener más información acerca de la sintaxis, consulte CREATE
>> TABLE,
>> CREATE FUNCTION y DECLARE @local_variable.
>>
>> collation_definition
>>
>> Es la intercalación de la columna que consiste en una configuración


local
> de
>> Microsoft® WindowsT y un estilo de comparación, una configuración local
>> de
>> Windows y la notación binaria, o una intercalación de Microsoft SQL
> ServerT.
>>
>> Observaciones
>> Se pueden declarar las funciones y variables del tipo table. Las
>> variables
>> table pueden utilizarse en funciones, procedimientos almacenados y
> procesos
>> por lotes.
>>
>> Utilice variables table en lugar de tablas temporales siempre que sea
>> posible. Las variables table proporcionan las siguientes ventajas:
>>
>> a.. Una variable table se comporta como una variable local. Tiene un
>> alcance bien definido, que es la función, el procedimiento almacenado o
>> el
>> proceso por lotes en la que está declarada.
>> Dentro de este alcance, una variable table puede utilizarse como una
> tabla
>> normal. Puede aplicarse en cualquier lugar de las instrucciones SELECT,
>> INSERT, UPDATE y DELETE donde se utilice una tabla o expresión de


tabla.
>> Como excepciones, table no puede utilizarse en las siguientes
> instrucciones:
>>
>> INSERT INTO table_variable EXEC stored_procedure
>>
>> SELECT select_list INTO table_variable statements.
>>
>> Las variables table se limpian automáticamente al final de la


función,
>> procedimiento almacenado o lote en el que están definidas.
>>
>> b.. Las variables table que se utilizan en procedimientos almacenados
> dan
>> lugar a menos recompilaciones de los procedimientos almacenados que
>> cuando
>> se utilizan tablas temporales.
>>
>>
>> c.. Las transacciones con variables table existen sólo mientras dura
>> una
>> actualización en la variable table. Por tanto, las variables table
> requieren
>> menos recursos de registro y bloqueo.
>> No se permite la operación de asignación entre variables de tablas.
> Además,
>> las variables de tabla no se ven afectadas por las operaciones de
>> deshacer
>> transacciones, debido a que disponen de un alcance limitado y no forman
>> parte de la base de datos.
>>
>>
>>
>> Salu2
>> Maxi
>> Buenos Aires - Argentina
>> Desarrollador Microsoft 3 Estrellas .NET
>> Nunca consideres el estudio como una obligación sino como
>> una oportunidad para penetrar en el bello y maravillosos
>> mundo del saber.
>> - Albert Einstein
>>
>>
>>
>> "Pablodegerli" escribió en el mensaje
>> news:%
>> > Hola amigos, tengo lo siguiente
>> >
>> > create table #Pos(Id_Ubicacion int)
>> > Insert into #Pos Exec SpUbicacionSimple
>> >
>> > funciona de maravilla, pero si quiero usar tabla temporales en


memoria
>> >
>> > declare @Pos Table(Id_Ubicacion int)
>> > Insert into @Pos Exec SpUbicacionSimple
>> >
>> > Servidor: mensaje 197, nivel 15, estado 1, procedimiento
>> > SpUbicacion,
>> > línea 22
>> > No se puede utilizar la instrucción EXECUTE como origen al


insertar
> en
>> > una variable de tabla.
>> >
>> > Entonces como puedo insertar el resultado del store en la tabla
>> > temporal
>> > en
>> > memoria
>> >
>> > Como siempre, gracias de antemano
>> >
>> >
>>
>>
>>
>> Outgoing mail is certified Virus Free.
>> Checked by AVG anti-virus system (http://www.grisoft.com).
>> Version: 6.0.788 / Virus Database: 533 - Release Date: 01/11/2004
>>
>>
>>
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.788 / Virus Database: 533 - Release Date: 01/11/2004


Respuesta Responder a este mensaje
#8 Pablodegerli
10/11/2004 - 17:42 | Informe spam
He realizado la siguiente prueba
create procedure SpA as
DECLARE @Prueba TABLE (a int primary key, b nvarchar(50) NOT NULL)
INSERT @Prueba select Id_Configuracion, Categoria from configuracion
select * from @Prueba
Y funciona, con lo cual la restriccion no es tal.
Al igual que un ejemplo en el mensaje de asunto "Funciones Recursivas" del
dia de hoy que reponde Gustavo Larriera

Pero si hago
create procedure SpC as
select Id_Configuracion, Categoria from configuracion

create procedure SpB as
DECLARE @Prueba TABLE (a int primary key, b nvarchar(50) NOT NULL)
INSERT @Prueba exec SpC
select * from @Prueba
No me deja compilar el SpB por :
Servidor: mensaje 197, nivel 15, estado 1, procedimiento SpB, línea 4
No se puede utilizar la instrucción EXECUTE como origen al insertar en
una variable de tabla.

Creo que ahi si no tengo nada mas que hacer o la sintaxis de INSERT @Prueba
exec SpC va de otra forma



"ulises" escribió en el mensaje
news:43f601c4c691$3ceb07d0$
Esa es una de las restricciones del tipo de datos TABLE no
puede usarse ni con INSERT INTO ni con SELECT ..INTO, vas a
tener que seguir usando la tabla temporal.

Saludos,
Ulises

Hola amigos, tengo lo siguiente

create table #Pos(Id_Ubicacion int)
Insert into #Pos Exec SpUbicacionSimple

funciona de maravilla, pero si quiero usar tabla


temporales en memoria

declare @Pos Table(Id_Ubicacion int)
Insert into @Pos Exec SpUbicacionSimple

Servidor: mensaje 197, nivel 15, estado 1,


procedimiento SpUbicacion,
línea 22
No se puede utilizar la instrucción EXECUTE como


origen al insertar en
una variable de tabla.

Entonces como puedo insertar el resultado del store en la


tabla temporal en
memoria

Como siempre, gracias de antemano


.

Respuesta Responder a este mensaje
#9 ulises
10/11/2004 - 20:11 | Informe spam
La restricción es usarla contra el procedimiento, no contra
un select normal, en resumen esto no es permitido :

INSERT INTO tabla EXEC procedimiento

Saludos,
Ulises

He realizado la siguiente prueba
create procedure SpA as
DECLARE @Prueba TABLE (a int primary key, b nvarchar(50)


NOT NULL)
INSERT @Prueba select Id_Configuracion, Categoria from


configuracion
select * from @Prueba
Y funciona, con lo cual la restriccion no es tal.
Al igual que un ejemplo en el mensaje de asunto "Funciones


Recursivas" del
dia de hoy que reponde Gustavo Larriera

Pero si hago
create procedure SpC as
select Id_Configuracion, Categoria from configuracion

create procedure SpB as
DECLARE @Prueba TABLE (a int primary key, b nvarchar(50)


NOT NULL)
INSERT @Prueba exec SpC
select * from @Prueba
No me deja compilar el SpB por :
Servidor: mensaje 197, nivel 15, estado 1,


procedimiento SpB, línea 4
No se puede utilizar la instrucción EXECUTE como


origen al insertar en
una variable de tabla.

Creo que ahi si no tengo nada mas que hacer o la sintaxis


de INSERT @Prueba
exec SpC va de otra forma



"ulises" escribió en el mensaje
news:43f601c4c691$3ceb07d0$
Esa es una de las restricciones del tipo de datos TABLE no
puede usarse ni con INSERT INTO ni con SELECT ..INTO, vas a
tener que seguir usando la tabla temporal.

Saludos,
Ulises

Hola amigos, tengo lo siguiente

create table #Pos(Id_Ubicacion int)
Insert into #Pos Exec SpUbicacionSimple

funciona de maravilla, pero si quiero usar tabla


temporales en memoria

declare @Pos Table(Id_Ubicacion int)
Insert into @Pos Exec SpUbicacionSimple

Servidor: mensaje 197, nivel 15, estado 1,


procedimiento SpUbicacion,
línea 22
No se puede utilizar la instrucción EXECUTE como


origen al insertar en
una variable de tabla.

Entonces como puedo insertar el resultado del store en la


tabla temporal en
memoria

Como siempre, gracias de antemano


.





.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida