Как: автоматическое имя столбца при построении таблицы - PullRequest
0 голосов
/ 18 апреля 2019

Я видел некоторые ответы, которые казались близкими к моему решению, но они использовали код, и я бы предпочел сделать это в SQL, если смогу.Я примерно знаю, что нужно, но я никогда не видел, чтобы кто-нибудь делал это раньше в SQL.Я строю таблицу, но я не хочу настраивать каждое имя столбца вручную.Структура будет примерно такой:

ID - BIGINT - Primary Key - Seed Increment 1 start at 1
Email - NVARCHAR(500) do not allow null
Board_Name - NVARCHAR(100) - Do not allow null 
Tile_1 - BIT - Do Not Allow Null
Tile_2 - BIT - Do Not Allow Null
Tile_3 - BIT - Do Not Allow Null
Tile_4 - BIT - Do Not Allow Null
Tile_5 - BIT - Do Not Allow Null
Tile_6 - BIT - Do Not Allow Null
Tile_7 - BIT - Do Not Allow Null
Tile_8 - BIT - Do Not Allow Null
Tile_9 - BIT - Do Not Allow Null
Tile_10 - BIT - Do Not Allow Null

В таблице "Tile_X" мне нужно сделать это 348 раз.Очевидно, я не хочу делать это 348 раз.

 DECLARE @X INT

 SET @X = 1

 WHILE (@X <=348)
 BEGIN
     PRINT @X
     SET @X = @X + 1

     ALTER TABLE [dbo].[Game_Board]
     ADD 'Tile_' + @X BIT NOT NULL;
 END
 GO

Выдает ошибку:

Сообщение 102, Уровень 15, Состояние 1, Строка 11
Неверный синтаксис рядом с 'Tile _'.

Обновление: я уже построил таблицу, но я еще не добавил столбцы плитки.Поэтому мне нужно выяснить, как исправить этот цикл, чтобы он мог добавить их.

Обновление: также пробовал это:

DECLARE @X INT
DECLARE @Column NVARCHAR(100)

SET @X = 1
SET @Column = 'Tile_' + @X

WHILE (@X <=348)
BEGIN
    PRINT @X    

    ALTER TABLE [dbo].[Game_Board]
    ADD @Column BIT NOT NULL;

    SET @X = @X + 1
    SET @Column = 'Tile_' + @X
END
GO

Ошибка получения:

Сообщение 102, Уровень 15, Состояние 1, Строка 12
Неверный синтаксис рядом'@Column'.

1 Ответ

1 голос
/ 19 апреля 2019

Вы должны использовать динамический T-SQL, как показано в коде ниже

DECLARE @X INT;
DECLARE @Column NVARCHAR(100);
SET @X = 1;
SET @Column = 'Tile_' + CAST(@X AS NVARCHAR(3));
DECLARE @tsql AS NVARCHAR(MAX)= '';
WHILE(@X <= 348)
    BEGIN
        SET @tsql = @tsql + ' ALTER TABLE [dbo].[Game_Board] '
        SET @tsql = @tsql + ' ADD ' + @Column + ' BIT NOT NULL;';
        SET @X = @X + 1;
        SET @Column = 'Tile_' + CAST(@X AS NVARCHAR(3));
    END;
--PRINT @tsql
EXEC sys.sp_executesql 
    @tsql;
GO

См. Также sp_executesql (Transact-SQL)

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