Как мне просмотреть содержимое таблицы ms sql и поместить строки в другую таблицу?

Я хочу просмотреть содержимое таблицы (MS SQL), собрать имена в столбце и поместить их в цикл изменения таблицы.

Например:

Bank names(column name) | Desc (column name)

Nationwide   | Example

HSBC         | Example

Halifax      | Example

ALTER TABLE banks

ADD (rows from bank table) varchar(255);

Конечный результат:

переделал другую таблицу:

(Columns within new table \/)

Nationwide | HSBC | Halifax

Рассмотрите возможность выполнения Pivot со значениями, содержащимися в столбце Названия банков, (blogs.msdn.microsoft.com/spike/2009/03/03/…)

Ryan Wilson 10.08.2018 14:57

чего ты здесь пытаешься достичь? Это не похоже на хороший способ делать что-то

Squirrel 10.08.2018 15:10

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

Sam 10.08.2018 15:14

Реляционные базы данных работают не так. Вы не добавляете новые столбцы для размещения значений строк. Что-то здесь пошло не так.

Sean Lange 10.08.2018 15:33
0
4
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого вы можете формировать динамические операторы sql.

--Table to hold the banks while you work
CREATE TABLE #firsttable (Bank VARCHAR(20), Descr VARCHAR(20))
INSERT INTO #firsttable
(
    Bank
  , Descr
)
VALUES
('Nationwide', 'blah')
, ('HSBC','blah blah')
, ('Halifax', 'blah blah blah')

--The existing table you will be modifying
CREATE TABLE #existingtable (id INT)

--Variables
DECLARE @sql NVARCHAR(MAX)
DECLARE @currentbank VARCHAR(255)
DECLARE @banksleft INT

SELECT @banksleft = COUNT(1) FROM #firsttable;

--Loop through the banks
WHILE (@banksleft > 0)
    BEGIN
    SELECT @currentbank = bank FROM #firsttable;
    SELECT @sql = 'ALTER TABLE #existingtable ADD ' +  '[' + @currentbank  + '] varchar(255);' FROM #firsttable 

    --Run the alter statement
    EXEC sp_executesql @sql;

    --Get rid of the bank you have just added as a column
    DELETE
    FROM #firsttable WHERE Bank = @currentbank;
    --Reset the counter
    SELECT @banksleft = COUNT(1) FROM #firsttable;

    end

--To show the columns added to the table
SELECT * FROM #existingtable AS e;

--Cleanup
DROP TABLE #firsttable;
DROP TABLE #existingtable;

Другие вопросы по теме