Member 10379103 Ответов: 1

Как вставить эти поля во временную таблицу с помощью SELECT into


Мне нужно выбрать эти поля в временную таблицу с помощью SELECT INTO вместо того, чтобы сначала создавать временную таблицу и все ее столбцы. Окружной DBA хочет просто добавлять или удалять поля без необходимости обновлять таблицу каждый раз:

BEGIN TRAN

  SELECT DISTINCT 
                    @C1 AS C1 ,
                    @C2 AS C2 ,
                    @C3 AS C3 ,
                    @C4 AS C4 ,
                    @C5 as C5,
                    @C6 as C6,
                    @C7 as C7,
                    @C8 as C8,
                    @C9 as C9,
                    @C10 as C10,
                    @C11,
					@C12,
					@C13,
					@C14,
					@C15,
                    C16,
                    C17,
                    C18,
                    C19,
                    C20,
                    C21,
                    0,0,0,0, 0, 0, 0, @C22 
            FROM    ( SELECT    Field1 ,
                                Field2,
                                Field3,
                                Field4,
                                Field5,
                                Field6
                      FROM      ( SELECT    Field1,
                                            UPPER(ISNULL(Field2, 'UNDEFINED')) AS Field2 ,
                                            UPPER(ISNULL(Field3, 'UNDEFINED')) AS Field3,
                                            UPPER(ISNULL(Field4,
                                                         'UNDEFINED')) AS Field4 ,
                                            UPPER(ISNULL(Field5, 'UNDEFINED')) AS Field5,
                                            UPPER(ISNULL(Field6,
                                                         'UNDEFINED')) AS Field6  
                                  FROM      dbo.MyTableOne
                                  WHERE Booktype = 'Fiction'
                                            
                                  GROUP BY  Field1,
                                            UPPER(ISNULL(Field2, 'UNDEFINED')) ,
                                            UPPER(ISNULL(Field3, 'UNDEFINED')) ,
                                            UPPER(ISNULL(Field4,
                                                         'UNDEFINED')) ,
                                            UPPER(ISNULL(Field5, 'UNDEFINED')) ,
                                            UPPER(ISNULL(Field6,
                                                         'UNDEFINED'))                                                       
                                 
                                  UNION ALL
                                  SELECT    Field1,
                                           Field2, ,
                                             Field3,
                                           Field4,
                                             Field5,
                                           Field6,
                                  FROM      dbo.MyTableTwo

				 WHERE Booktype = 'Fiction'
										
                                 UNION ALL
                                  SELECT    'TitlesAll' as Field1,
                                            Field2,
                                            Field3,
                                            Field4,
                                            Field5,
                                            Field6
                                  FROM      dbo.MyTableThree

										
                               Where Booktype = 'Fiction'
                                            

                                ) X
                    ) Y


Это должно быть довольно легко - я использовал SELECT INTO много раз.

Что я уже пробовал:

Я пробовал включать INTO #temptable перед первым "FROM", а затем включать его в каждое" FROM", но это не сработало. Я также воспользовался поиском google и проверил сайт MDSN.

1 Ответов

Рейтинг:
2

Wendelius

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

Рассмотрим следующие примеры

BEGIN
   IF EXISTS (SELECT 1 FROM tempdb.INFORMATION_SCHEMA.TABLES tc  WHERE tc.TABLE_NAME like '#temptable1__%') BEGIN
      DROP TABLE #temptable1
   END
   SELECT * 
   INTO #temptable1
   FROM ( SELECT t.TABLE_NAME
          FROM INFORMATION_SCHEMA.TABLES t) a
END

SELECT * FROM #temptable1

производит что-то вроде
TABLE_NAME
----------
table1
table2
table3

и запускает следующее
BEGIN
   IF EXISTS (SELECT 1 FROM tempdb.INFORMATION_SCHEMA.TABLES tc  WHERE tc.TABLE_NAME like '#temptable1__%') BEGIN
      DROP TABLE #temptable1
   END
   SELECT * 
   INTO #temptable1
	FROM ( SELECT t.TABLE_NAME, t.TABLE_SCHEMA
           FROM INFORMATION_SCHEMA.TABLES t) a
END

SELECT * FROM #temptable1

дает
TABLE_NAME   TABLE_SCHEMA
----------   ------------
table1       dbo
table2       dbo
table3       dbo