Удаление остальных столбцов после определенного столбца в транзакционном SQL - PullRequest
0 голосов
/ 20 марта 2019

Допустим, у меня есть 3 таблицы со столбцами Col1, col2, col3, col4, col5, col6, col7, col8 ........ col56 Я хочу динамически удалить все столбцы во всех таблицах после Col4,

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

Изменить таблицу Удалить столбец Col5, col6, col7, ...., Col56

Может кто-нибудь предложить, пожалуйста, какой-либо альтернативный метод, который я мог бы реализовать для достижения этого в MS-SQL.

1 Ответ

2 голосов
/ 20 марта 2019

Предполагая , что у вас есть только столбцы с именами Col1, Col2, ... Col56, и которые расположены в «правильном» порядке (по возрастанию моего числа значение) вы можете сделать что-то вроде:

CREATE TABLE YourTable (Col1 int,
                        Col3 int,
                        Col4 int,
                        Col5 int,
                        Col6 int,
                        Col7 int,
                        Col8 int,
                        Col9 int,
                        Col10 int);
SELECT *
FROM  dbo.YourTable;
GO

DECLARE @SQL nvarchar(MAX);
DECLARE @TableName sysname = N'YourTable';

SET @SQL = N'ALTER TABLE ' + QUOTENAME(@TableName) + N' DROP COLUMN ' + 
           STUFF((SELECT N',' + QUOTENAME(C.COLUMN_NAME)
                  FROM INFORMATION_SCHEMA.COLUMNS C
                  WHERE C.TABLE_NAME = @TableName
                    AND C.ORDINAL_POSITION > 4
                    --AND C.COLUMN_NAME LIKE N'Col%' --uncomment if needed
                  ORDER BY C.ORDINAL_POSITION
                  FOR XML PATH(N''),TYPE).value(N'.',N'nvarchar(MAX)'),1,1,N'') + N';';
PRINT @SQL;

EXEC sp_executesql @SQL;
GO
SELECT *
FROM  dbo.YourTable;

GO
DROP TABLE YOurTable;

DB <> Fiddle

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