SQL Server : создание временной таблицы в хранимой процедуре

#sql-server

Вопрос:

Я создаю процедуру для создания временных таблиц, но я хочу сделать ее более общей, а не для временной только одной исходной таблицы

 ALTER PROCEDURE [dbo].[CREATE_TEMP_TABLES]
AS 
    IF NOT EXISTS (SELECT * FROM SYS.TABLES 
                   WHERE NAME=N'TEMP_FactAdditional' AND type ='U')
    BEGIN
        CREATE TABLE dbo.TEMP_FactAdditional
        (
             [ProductKey] [int] NOT NULL,
             [CultureName] [nvarchar](50) NOT NULL,
             [ProductDescription] [nvarchar](max) NOT NULL
        )
    END 
GO
 

поэтому IF NOT EXISTS (SELECT * FROM SYS.TABLES WHERE NAME=N'TEMP_FactAdditional' AND type ='U') здесь я вижу его только создание TEMP_FactAdditional стол и у меня вроде 8 или 9 оригинальных таблиц, в которых каждая из них отличается, CREATE TABLE dbo.TEMP_FactAdditional я думал, чтобы добавить какую-то функцию или метод, чтобы сделать более общий, но у меня не так много знаний об этом, я, проектируя склад, и мой первый шаг заключается в повышении эффективности передачи данных от дБ до ДБ. например, здесь на фото склад. Может ли кто-нибудь помочь мне сделать процедуру более эффективной?

Комментарии:

1. К вашему сведению, вызываемая таблица TEMP_FactAdditional не является временной таблицей. Временные объекты начинаются с a # и не соответствуют требованиям схемы.

2. Спасибо за информацию, так что #TEMP_FactAdditional-это настоящая временная таблица, это что-нибудь меняет в SSMS?

3. В SSMS? Какое отношение все вышесказанное имеет к SSMS?

4. Что ты имеешь в виду? Я постоянно работаю с SSMS для разработки базы данных, процедур, временных таблиц и исходных таблиц.

5. Плохая идея, гораздо проще просто создать каждую таблицу отдельно. Вы подумывали о том, чтобы просто получить надлежащее программное обеспечение ETL для перемещения данных?

Ответ №1:

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

 SELECT *
INTO my_new_table_name
FROM my_old_table_name
WHERE 1 = 0
 

Это создаст новую таблицу с той же структурой и без данных. Тогда теоретически вы могли бы написать процедуру с использованием динамического SQL для запуска этого кода для списка таблиц, таким образом «создав» несколько таблиц в абстрактном случае. Вы можете передать два параметра, два имени таблиц.