Сделайте такой запрос динамическим - PullRequest
1 голос
/ 13 сентября 2011

Я делаю запрос для создания таблицы, которая имеет два элемента в SQL

SELECT [att1]
      ,[att2]
      ,[att3]
      ,[att4]
      ,[att5]
      ,[att6]
      ,[att7]
      ,[att8]
      ,[att9]
      ,[att10]
      ,att11 = att1,
       att12 = att2,
       att13 = att3,
       att14 = att4,
       att15 = att5,
       att16 = att6,
       att17 = att7,
       att18 = att8,
       att19 = att9,
       att20 = att10
INTO Table_20
FROM Table_10;

Каков наилучший способ сделать это динамическим, и если у меня есть таблица с 30 atts, сделайтестол с 30 * 2 атс (двойной размер)?

1 Ответ

2 голосов
/ 13 сентября 2011
DECLARE 
    @table NVARCHAR(512) = N'dbo.Table_10';
    @sql   NVARCHAR(MAX) = N'',
    @c     INT;

SELECT @sql += N',' + name 
    FROM sys.columns 
    WHERE [object_id] = OBJECT_ID(@table) 
    AND name LIKE 'att%';

SELECT @c = @@ROWCOUNT;

SELECT @sql += N',att' + CONVERT(VARCHAR(12), 
      @c + CONVERT(INT, REPLACE(name, 'att', '')))
      + ' = ' + name 
    FROM sys.columns  
    WHERE [object_id] = OBJECT_ID(@table) 
    AND name LIKE 'att%';

SELECT @sql = N'SELECT ' + STUFF(@sql, 1, 1, '') 
    + ' INTO dbo.Table_20 FROM ' + @table + ';';

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