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

Откуда:
Сообщений: 55
Есть некая таблица Table_name(spid,Name1,Name2,Name3)

Необходимо сформировать запрос выводящий готовый инсерт в эту таблицу. Переносим в другой спид значение текущего спида.
Делаю так

declare @spidN varchar(10), @table varchar(50)
select @table = 'Table_name'
select @spidN = '@spid1'

select 'declare '+@spidN+ ' int' +char(13)+
'select ' +@spidN+' = max(spid) + 1'+char(13)+
'from ' + @table+ '' +char(13)+
''+char(13)+
'select '+@spidN+' = IsNull(@spid1, 99990)' +char(13)+
'if ' +@spidN+' < 99990' +char(13)+
'select ' +@spidN+ ' = 99990' +char(13)+
''+char(13)+
'insert ' +@TABLE+ (select sc.name from sysobjects so
inner join syscolumns sc
on sc.id=so.id
where so.name='Table_name')+'' +char(13)+
'select ' +@spidN+ ','+(select sc.name from sysobjects so
inner join syscolumns sc
on sc.id=so.id
where so.name='Table_name')+char(13)+
'from ' +@TABLE+ ''+char(13)+
'where spid = @@spid' + '' +char(13)

Результатом работы запроса должен быть скрипт

declare @spid1 int
select @spid1 = max(spid) + 1
from Table_name

select @spid1 = IsNull(@spid1, 99990)
if @spid1 < 99990
select @spid1 = 99990

insert Table_name(spid,Name1,Name2,Name3)
select @spid1, Name1,Name2,Name3
from Table_name
where spid = @@spid

Весь затык в запросе
select sc.name from sysobjects so
inner join syscolumns sc
on sc.id=so.id
where so.name='Table_name'

Который должен начитать список полей таблицы и вставить их как надо, не понимаю, как по-человечески это все провернуть.
11 июл 15, 14:54    [17880232]     Ответить | Цитировать Сообщить модератору
 Re: Вывод полей таблицы  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
Курсор
"немодно", но просто и надёжно

Открываем курсор по селекту, идём по нему, конкатенируем нужные строки

Ну или для пуще кошерности можно посмотреть сообщения на тему конкатенации строк, вот тут даже есть рядом 17862028
11 июл 15, 16:05    [17880400]     Ответить | Цитировать Сообщить модератору
 Re: Вывод полей таблицы  [new]
U_rtqwec
Member

Откуда:
Сообщений: 55
Я уже думал про курсор, но мне кажется, что курсор схватит одно поле и выполнит скрипт для него, потом схватит другое и выполнит опять скрипт для другого, то есть туда будет попадать только одно поле, а не все сразу.
11 июл 15, 16:54    [17880486]     Ответить | Цитировать Сообщить модератору
 Re: Вывод полей таблицы  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
курсором нужно идти по списку полей и конкатенировать их в строку, для формирования списков в INSERT и SELECT клаузах
11 июл 15, 17:15    [17880521]     Ответить | Цитировать Сообщить модератору
 Re: Вывод полей таблицы  [new]
U_rtqwec
Member

Откуда:
Сообщений: 55
То есть это что-то наподобие?
SELECT @ResultVar = @ResultVar + результат проходки курсора
11 июл 15, 17:48    [17880582]     Ответить | Цитировать Сообщить модератору
 Re: Вывод полей таблицы  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
Типа того
11 июл 15, 18:03    [17880614]     Ответить | Цитировать Сообщить модератору
 Re: Вывод полей таблицы  [new]
U_rtqwec
Member

Откуда:
Сообщений: 55
Какие еще способы можно придумать?
11 июл 15, 21:31    [17881110]     Ответить | Цитировать Сообщить модератору
 Re: Вывод полей таблицы  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
U_rtqwec
Какие еще способы можно придумать?


Oleksii Kovalov
вот тут даже есть рядом 17862028
11 июл 15, 21:38    [17881127]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить