Имя столбца вставки T-SQL в качестве первой строки - PullRequest
0 голосов
/ 09 июня 2019

У меня есть следующая таблица (Таблица_1):

Seq  |  Name  |  Column1  |  Column2

Есть еще одна таблица (Таблица_2) со следующей структурой:

Name  |  Column1Table2  |  Column2Table2

Мне нужно вставить имя каждогостолбец к первой таблице.Таким образом, результат должен быть (Seq будет номером строки, начиная с 1):

+-----+------+---------------+---------------+
| Seq | Name |    Column1    |    Column2    |
+-----+------+---------------+---------------+
|   1 | Name | Column1Table2 | Column2Table2 |
+-----+------+---------------+---------------+

Ответы [ 3 ]

2 голосов
/ 09 июня 2019

Предполагая, что Seq в первой таблице является столбцом с автоинкрементом, вы можете просто пропустить его во время вставки, например,

INSERT INTO Table_1 (Name, Column1, Column2)
SELECT Name, Column1Table2, Column2Table2
FROM Table_2;
1 голос
/ 09 июня 2019

Seq будет номером строки, начиная с 1

Это то, что вы пытаетесь сделать?

;WITH CTE AS
(
  SELECT ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) RN,
         Name, 
         Column1Table2, 
         Column2Table2
  FROM Table2
)
INSERT INTO Table1(Seq, Name, Column1, Column2)
SELECT RN,
       Name,
       Column1Table2,
       Column2Table2
FROM CTE;

Демонстрация:

CREATE TABLE Table1(
  Seq INT,
  Name VARCHAR(45),
  Column1 VARCHAR(45),
  Column2 VARCHAR(45)
);

CREATE TABLE Table2(
  Name VARCHAR(45),
  Column1Table2 VARCHAR(45),
  Column2Table2 VARCHAR(45)
);

INSERT INTO Table2 VALUES
('Name1', 'Col1Value1', 'Col2Value1'),
('Name2', 'Col1Value2', 'Col2Value2');

;WITH CTE AS
(
  SELECT ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) RN,
         Name, 
         Column1Table2, 
         Column2Table2
 FROM Table2
)
INSERT INTO Table1(Seq, Name, Column1, Column2)
SELECT RN,
       Name,
       Column1Table2,
       Column2Table2
FROM CTE;

SELECT *
FROM Table1;

Возвращает:

+-----+-------+------------+------------+
| Seq | Name  |  Column1   |  Column2   |
+-----+-------+------------+------------+
|   1 | Name1 | Col1Value1 | Col2Value1 |
|   2 | Name2 | Col1Value2 | Col2Value2 |
+-----+-------+------------+------------+

Демонстрация в реальном времени


Обновление:

Мне нужно вставить имя каждого столбца в первую таблицу

Не думаю, что вы пытаетесь вставить имена столбцов таблицы в другой таблице , но если да, то почему вы хотите это сделать?что ты на самом деле пытаешься сделать?а почему не просто

INSERT INTO Table1 (Seq, Name, Column1, Column2) VALUES
(1, 'Name', 'Table2Column1', 'Table2Column2');
--You can remove <Name> column and <1> value if it's an identity column
0 голосов
/ 09 июня 2019

Спасибо всем.В итоге я использовал функцию Stuff, чтобы объединить имена столбцов из таблицы схемы, а затем перевести значения в столбцы и вставить их в таблицу Temp.И, наконец, вставьте значения таблицы Temp в основную таблицу.Этот пост был очень полезным.

Эффективное преобразование строк в столбцы на сервере SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...