Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   tabla como retorno de procedimiento MSSQL 2000 (https://www.clubdelphi.com/foros/showthread.php?t=34640)

luisgutierrezb 16-08-2006 17:13:23

tabla como retorno de procedimiento MSSQL 2000
 
Es posible y como se haria, poder regresar una tabla que yo defina desde un procedimiento almacenado?? algo asi como

create procedure procedimiento as table (nom as varchar(10), num as int)

y si se puede, como "llenaria" los campos? de esa tabla

olbeup 24-08-2006 18:53:28

Mira si te vale el texto que he sacado de internet de las base de datos temporales.

Tablas temporales

Se pueden crear tablas temporales locales y globales. Las tablas temporales locales son visibles sólo en la sesión actual; las tablas temporales globales son visibles para todas las sesiones.
Coloque un prefijo de signo numérico simple (#nombreTabla) en los nombres de las tablas temporales locales y un prefijo de un signo numérico doble (##nombreTabla) en los nombres de las tablas temporales globales.
Las instrucciones SQL hacen referencia a la tabla temporal mediante el valor especificado por nombreTabla en la instrucción CREATE TABLE:
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)

Si se crea una tabla temporal local en un procedimiento almacenado o una aplicación que varios usuarios pueden ejecutar al mismo tiempo, SQL Server tiene que ser capaz de distinguir las tablas creadas por los distintos usuarios. SQL Server hace esto al anexar internamente un sufijo numérico a cada nombre de tabla temporal local. El nombre completo de una tabla temporal tal como se almacena en la tabla sysobjects de tempdb consta del nombre de la tabla especificado en la instrucción CREATE TABLE y el sufijo numérico generado por el sistema. Para permitir que se agregue el sufijo, el nombreTabla especificado de un nombre temporal local no puede exceder de 116 caracteres.

Las tablas temporales se quitan automáticamente cuando se salen del alcance, a menos que se ya hayan quitado explícitamente mediante DROP TABLE:
  • Una tabla temporal local creada en un procedimiento almacenado se quita automáticamente cuando se completa el procedimiento almacenado. Cualquiera de los procedimientos almacenados anidados ejecutados por el procedimiento almacenado que creó la tabla puede hacer referencia a la tabla. El proceso que llamó al procedimiento almacenado que creó la tabla no puede hacer referencia a la tabla.
  • Todas las demás tablas temporales se quitan automáticamente al final de la sesión actual.
  • Las tablas temporales globales se quitan automáticamente cuando la sesión que creó la tabla finaliza y todas las tareas restantes han dejado de hacer referencia a ellas. La asociación entre una tarea y una tabla se mantiene sólo durante la vida de una única instrucción Transact-SQL. Esto significa que la tabla temporal global se quita al finalizar la última instrucción Transact-SQL que estuviera haciendo referencia activamente a la tabla cuando finalizó la sesión de creación.
Una tabla temporal local creada en un procedimiento almacenado o desencadenador es distinta de una tabla temporal que tenga el mismo nombre y que se haya creado antes de que se llame al procedimiento almacenado o al desencadenador. Todas las referencias al nombre del procedimiento almacenado o desencadenador se resuelven contra la tabla temporal creada en el procedimiento o en el desencadenador, no contra la versión que existía antes de que se llamara al procedimiento o al desencadenador. Los procedimientos almacenados anidados pueden crear también tablas temporales con el mismo nombre que la tabla temporal creada por el procedimiento almacenado que la llamó. Todas las referencias al nombre de la tabla que se efectúan en el procedimiento almacenado anidado se resuelven en la tabla creada en el procedimiento almacenado, por ejemplo:
CREATE PROCEDURE Test2
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE Test1
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (1)
SELECT Test1Col = x FROM #t
EXEC Test2
GO
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (99)
GO
EXEC Test1
GO

Los resultados de la ejecución de esta secuencia de comandos son:
(1 row(s) affected)

Test1Col
-----------
1

(1 row(s) affected)

Test2Col
-----------
2

Cuando se crean tablas temporales globales o locales, la sintaxis CREATE TABLE admite la definición de restricciones, excepto las restricciones FOREIGN KEY. Si en una tabla temporal se especifica una restricción FOREIGN KEY, la instrucción devuelve un mensaje de advertencia que indica que la restricción se saltó y que la tabla se ha creado sin las restricciones FOREIGN KEY. En las restricciones FOREIGN KEY no se puede hacer referencia a tablas temporales.


La franja horaria es GMT +2. Ahora son las 15:49:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi