Подтвердить что ты не робот

TSQL Определить таблицу Temp (или переменную таблицы) Без определения схемы?

Есть ли способ определить временную таблицу без определения ее схемы спереди?

4b9b3361

Ответ 1

Фактически использование таблицы VARIABLE, таблицы в памяти, является оптимальным способом. #table создает таблицу в temp db, а таблица ## - глобальная - как с образами дисков. Рассмотрим замедление/поражение, испытываемое количеством транзакций.

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 

Обратите внимание на способ вставки в эту временную таблицу.

Нижняя сторона этого заключается в том, что для записи может потребоваться немного больше времени, поскольку вам нужно определить свою переменную таблицы.

Я бы также рекомендовал SQL-запрос для анализатора запросов с помощью RedGate.

Ответ 2

вам не нужен OPENQUERY. Просто поместите "INTO #AnyTableName" между списком выбора и FROM любого запроса...

SELECT *
    INTO #Temp1
    FROM table1
    WHERE x=y

Ответ 3

Да, вы можете создать его с помощью

SELECT INTO ...

Скажем,

SELECT * INTO #t
FROM OPENQUERY( 'server',
'exec database.dbo.proc_name value1, value2, ... ' )