Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 alter table #tabl add col int  [new]
Garafutdin
Member

Откуда: Москва
Сообщений: 139
Уважаемые программисты! Прошу помочь! Проблема в следующем:
создаю таблицу динамически и количество столбцов зависит от одного условия, проблема с выставлением заголовков столбцов в цикле. Подскажите что можно сделать с этим?

declare @i int
declare @k int
create table #tabl(id int)
set @i = 1
set @k = (select count(id) from #report)
while @i < @k+1 begin
alter table #tabl add col int
set @i = @i+1
end

Когда все работает так то он ругается что не может в цикле добавить второе поле с одинаковым именем, пробовал писать alter table #tabl add col+convert(varchar(3),@id,104) int ругается...
16 июн 09, 12:37    [7304426]     Ответить | Цитировать Сообщить модератору
 Re: alter table #tabl add col int  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36814
Естественно, больше одного поля с пустым именем он создать не может.

З.Ы. И как вы собрались дальше работать с таблицей неизвестной структуры?
16 июн 09, 12:40    [7304442]     Ответить | Цитировать Сообщить модератору
 Re: alter table #tabl add col int  [new]
Garafutdin
Member

Откуда: Москва
Сообщений: 139
Гавриленко Сергей Алексеевич,

col - это вообще то название столбца, если написать следующее

create table #tabl(id int)
alter table #tabl add col int
alter table #tabl add col2 int

То результатом запроса
select * from #tabl
будет:
____________
id |col | col2 |
16 июн 09, 12:49    [7304532]     Ответить | Цитировать Сообщить модератору
 Re: alter table #tabl add col int  [new]
Garafutdin
Member

Откуда: Москва
Сообщений: 139
Проблема в том что мне нужно создать табличку с полями id,col,col2,col3,col4,col5
16 июн 09, 12:51    [7304548]     Ответить | Цитировать Сообщить модератору
 Re: alter table #tabl add col int  [new]
Glory
Member

Откуда:
Сообщений: 104760
Garafutdin

create table #tabl(id int)
alter table #tabl add col int
alter table #tabl add col2 int

То результатом запроса
select * from #tabl
будет:
____________
id |col | col2 |

Но пишите то вы alter table #tabl add col int
16 июн 09, 12:51    [7304552]     Ответить | Цитировать Сообщить модератору
 Re: alter table #tabl add col int  [new]
Garafutdin
Member

Откуда: Москва
Сообщений: 139
и т.д в зависимости от переменной @k
16 июн 09, 12:52    [7304558]     Ответить | Цитировать Сообщить модератору
 Re: alter table #tabl add col int  [new]
Glory
Member

Откуда:
Сообщений: 104760
https://www.sql.ru/faq/faq_topic.aspx?fid=104
16 июн 09, 12:53    [7304571]     Ответить | Цитировать Сообщить модератору
 Re: alter table #tabl add col int  [new]
Garafutdin
Member

Откуда: Москва
Сообщений: 139
Glory,

create table #tabl(id int)
alter table #tabl add pole int
alter table #tabl add pole2 int
select * from #tabl

Резултат
id | pole | pole2 |
-- Таблица имеет название столбцов
16 июн 09, 12:54    [7304583]     Ответить | Цитировать Сообщить модератору
 Re: alter table #tabl add col int  [new]
Garafutdin
Member

Откуда: Москва
Сообщений: 139
Glory,

Извините пож-та, спасибо за пример с динамическим запросом)) Но я категорически не могу применить его в данной ситуации, так как проблема с которой я столкнулся находится на 2-м метре моего запроса, и в нем используются другие временные таблицы которые я не смогу увидить если применю операцию exec(строки)
16 июн 09, 12:58    [7304609]     Ответить | Цитировать Сообщить модератору
 Re: alter table #tabl add col int  [new]
Glory
Member

Откуда:
Сообщений: 104760
Garafutdin
Glory,

Извините пож-та, спасибо за пример с динамическим запросом)) Но я категорически не могу применить его в данной ситуации,

Тогда ваша задача не имеет решения
16 июн 09, 12:59    [7304622]     Ответить | Цитировать Сообщить модератору
 Re: alter table #tabl add col int  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31200
Garafutdin
в нем используются другие временные таблицы которые я не смогу увидить если применю операцию exec(строки)
Почему "не смогу увидить"?

Стоит только использовать операцию exec, как все временные таблицы во всех процедурах перестают быть видимыми :-)
16 июн 09, 14:14    [7305178]     Ответить | Цитировать Сообщить модератору
 Re: alter table #tabl add col int  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
а вы пробовали ваще exec? или так, потому что вам кажется, что не будет видно?
declare @i int
declare @k int, @sql varchar(1000)
create table #tabl(id int)
set @i = 1
set @k = (select count(*) from master..sysdatabases)
while @i < @k+1 begin
set @sql = 'alter table #tabl add col' + cast(@i as varchar) + ' int'
exec (@sql)
print @sql
set @i = @i+1
end
select * from #tabl
--drop table #tabl

для спящего время бодрствования равносильно сну
16 июн 09, 14:51    [7305426]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить