Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Oleksii Kovalov Member Откуда: Сообщений: 100 |
Курсор "немодно", но просто и надёжно Открываем курсор по селекту, идём по нему, конкатенируем нужные строки Ну или для пуще кошерности можно посмотреть сообщения на тему конкатенации строк, вот тут даже есть рядом 17862028 |
11 июл 15, 16:05 [17880400] Ответить | Цитировать Сообщить модератору |
U_rtqwec Member Откуда: Сообщений: 55 |
Я уже думал про курсор, но мне кажется, что курсор схватит одно поле и выполнит скрипт для него, потом схватит другое и выполнит опять скрипт для другого, то есть туда будет попадать только одно поле, а не все сразу. |
11 июл 15, 16:54 [17880486] Ответить | Цитировать Сообщить модератору |
Oleksii Kovalov Member Откуда: Сообщений: 100 |
курсором нужно идти по списку полей и конкатенировать их в строку, для формирования списков в INSERT и SELECT клаузах |
11 июл 15, 17:15 [17880521] Ответить | Цитировать Сообщить модератору |
U_rtqwec Member Откуда: Сообщений: 55 |
То есть это что-то наподобие? SELECT @ResultVar = @ResultVar + результат проходки курсора |
11 июл 15, 17:48 [17880582] Ответить | Цитировать Сообщить модератору |
Oleksii Kovalov Member Откуда: Сообщений: 100 |
Типа того |
11 июл 15, 18:03 [17880614] Ответить | Цитировать Сообщить модератору |
U_rtqwec Member Откуда: Сообщений: 55 |
Какие еще способы можно придумать? |
11 июл 15, 21:31 [17881110] Ответить | Цитировать Сообщить модератору |
Oleksii Kovalov Member Откуда: Сообщений: 100 |
|
||||
11 июл 15, 21:38 [17881127] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |