Создать таблицу с n столбцами автоматически

Я хочу сохранить 236 значений int в sql в одной строке. Теперь я должен объявить таблицу, но я не хочу вводить в 236 раз имя столбца. Имена столбцов должны быть BYTE001, BYTE002,... или что-то другое префикс как BYTE (B, INT,...). Можно автоматически генерировать имена столбцов?

Я пробую следующий код, но он не работает:

USE dbXXX
DECLARE @Columname varchar(10)
SET @Columname = 'BYTE011'
ALTER table tbl_Archiv_BYTEsps
ADD @Columname int;

Я хочу сгенерировать имя столбца в цикле while, но кажется, что ему не разрешено использовать переменные с ADD-Command. Я alwasys получаю сообщение об ошибке: Неправильный синтаксис рядом с '@Columname' Что я могу сделать для создания таблицы? Или есть другой способ сохранить мои 236 целых значений?

3 ответа

Попробуйте этот вариант -

IF OBJECT_ID ('dbo.temp') IS NOT NULL
 DROP TABLE dbo.temp
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = 'CREATE TABLE dbo.temp (ID INT IDENTITY(1,1) PRIMARY KEY, ' + STUFF((
 SELECT ', BYTE' + RIGHT('000' + CAST(sv.number AS VARCHAR(3)), 3) + ' INT'
 FROM [master].dbo.spt_values sv
 WHERE sv.[type] = 'p'
 AND sv.number BETWEEN 1 AND 236
 FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')'
PRINT @SQL
EXEC sys.sp_executesql @SQL

Выход -

CREATE TABLE dbo.temp (ID INT IDENTITY(1,1) PRIMARY KEY, BYTE001 INT, BYTE002 INT, BYTE003 INT, BYTE004 INT, BYTE005 INT, BYTE006 INT, BYTE007 INT, BYTE008 INT, BYTE009 INT, BYTE010 INT, BYTE011 INT, BYTE012 INT, BYTE013 INT, ... , BYTE235 INT, BYTE236 INT)


Теперь я написал этот код:

USE sip_audi_01
DECLARE @Columname varchar(10)
DECLARE @integer int
DECLARE @query VARCHAR(MAX)
SET @integer = 0
SET @Columname = 'BYTE'
SET @query='ALTER table tbl_Archiv_BYTEsps ADD '+@Columname+' int'
WHILE @integer = 235
BEGIN
 SET @integer = @integer + 1
 SET @Columname = @Columname + CAST(@integer AS char)
 EXEC (@query)
 PRINT 'Nummer:' + CAST(@integer AS char)
END;

но ничего не происходит.... Где я могу прочитать вывод на печать в SQL Server ServerStudio? @Devart, извините, но ваш код слишком сложный для меня.


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

DECLARE @query VARCHAR(MAX)
SET @query='ALTER table tbl_Archiv_BYTEsps ADD '+@Columname+' int'
EXEC (@query)

Но я думаю, что лучше рассмотреть структуру таблицы, так как кажется, что бит беспорядок поддерживает 236 столбцов для одной таблицы.

licensed under cc by-sa 3.0 with attribution.