Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос средствами T-SQL, динамическое создание таблицы 
V
    Опции темы
Anark1
Дата 27.8.2010, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: нет
Всего: 11



Здравствуйте,
хочется создать некоторую таблицу динамическим образом, то есть на момент выполнения запроса некоторые параметры неизвестны. Приведу пример: есть таблицы, скажем TABLE_A, которая содержит столбы с именами ID, TYPE. Нужно построить TABLE_B, такую, чтобы у нее было число столбцов, равное количеству записей в таблице TABLE_A и причем название i-го столбца имело бы вид вроде "COLi", а типом этого столбца являлось бы значение, представленное в i-й записи TABLE_A столбца TYPE. Можно ли вообще сделать это средствами T-SQL?
Я буду в дальнейшем глубже изучать T-SQL, но сейчас нужно решение этого вопроса, а в нем я пока не компетентен smile. Я что-то попытался придумать:

Код

DECLARE @COUNTER int
DECLARE @TYPEOFCOL char
DECLARE @COLNAME char
SET @COLNAME = NULL
SET @COUNTER = 0
SET @TYPEOFCOL = NULL

SELECT @COUNTER = COUNT(*) FROM dbase.dbo.TABLE_A

WHILE @COUNTER>0
BEGIN
SELECT @TYPEOFCOL = dbase.dbo.TABLE_A.TYPE FROM dbase.dbo.TABLE_A WHERE ID = @COUNTER
SELECT @COLNAME = 'COL' + CAST(@COUNTER AS CHAR(50))
ALTER TABLE dbase.dbo.TABLE_B ADD @COLNAME @TYPEOFCOL
SELECT @COUNTER=@COUNTER-1
END


Проблема в операторе ALTER TABLE, не получается в качестве имен столбца и типа использовать переменные @COLNAME, @TYPEOFCOL. Подскажите есть ли выход из этой ситуации? 
Заранее спасибо.


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Deniz
Дата 27.8.2010, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 1
Всего: 44



Цитата(Anark1 @  27.8.2010,  02:48 Найти цитируемый пост)
Подскажите есть ли выход из этой ситуации?
даже если Вас съели, у Вас 2 выхода.  smile 
По существу. Посмотри EXECUTE

Это сообщение отредактировал(а) Deniz - 8.10.2010, 06:55


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Anark1
Дата 27.8.2010, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: нет
Всего: 11



Deniz, спасибо, это как раз то что нужно.


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.1168 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.