¿TSQL Define Tabla Temporal (o variable de tabla) Sin Definir Esquema?
¿Hay alguna forma de definir una tabla temporal sin definir su esquema por adelantado?
3 answers
En realidad, usar una VARIABLE de tabla, una tabla en memoria, es la forma óptima de hacerlo. La tabla # crea una tabla en temp db, y la tabla ##es global, ambas con accesos al disco. Considere la ralentización / éxito experimentado con el número de transacciones.
CREATE PROCEDURE [dbo].[GetAccounts]
@AccountID BIGINT,
@Result INT OUT,
@ErrorMessage VARCHAR(255) OUT
AS
BEGIN
SET NOCOUNT ON;
SET @Result = 0
SET @ErrorMessage = ''
DECLARE @tmp_Accounts TABLE (
AccountId BIGINT,
AccountName VARCHAR(50),
...
)
INSERT INTO @tmp_Accounts ([AccountId], [AccountName]...
)
SELECT AccountID, AccountName
FROM Accounts
WHERE ...
IF @@Rowcount = 0
BEGIN
SET @ErrorMessage = 'No accounts found.'
SET @Result = 0
RETURN @Result
END
ELSE
BEGIN
SET @Result = 1
SELECT *
FROM @tmp_Accounts
END
Tenga en cuenta la forma en que inserta en esta tabla temporal.
El lado negativo de esto es que puede tomar un poco más de tiempo escribir, ya que tiene que definir su variable de tabla.
También recomendaría SQL Prompt para el Analizador de consultas por RedGate.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-21 20:09:26
No necesita OPENQUERY. Simplemente ponga "EN # AnyTableName" entre la lista de selección y el DESDE de cualquier consulta...
SELECT *
INTO #Temp1
FROM table1
WHERE x=y
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-27 21:17:19
Sí, puedes crearlo con
SELECT INTO ...
Digamos
SELECT * INTO #t
FROM OPENQUERY( 'server',
'exec database.dbo.proc_name value1, value2, ... ' )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-27 01:59:09