Вставить оператор с курсором - PullRequest
0 голосов
/ 05 января 2010

В таблице около 113 столбцов. и в таблице есть две записи по умолчанию, одна для неизвестных, а другая для неприменимых. Таким образом, каждый столбец имеет свое собственное значение по умолчанию для представления неизвестного и неприменимого.

Я не хочу писать регулярные операторы вставки, чтобы получить эти две записи.

Итак, я попытался вставить каждый столбец с помощью курсора.

Получил имена столбцов для этой таблицы из information_schema.columns и попытался вставить значения из точной таблицы в другое место, используя инструкцию "insert into select", но имя столбцов, которые мы получили из information_schema

Declare @col_name varchar(50)

declare my_cur CURSOR for
  select  column_name  from information_schema.columns 
  where table_name = 'tabl' and table_catalog = 'db'
  and table_schema = 'dbo'


  Fetch next from my_cur
  into @col_name

  while @@FETCH_STATUS  = 0
  BEGIN

   Insert into db.dbo.tabl (***@col_name***)
   select ***@col_name*** from openrowset('sqlncli', 'server=my_server;           trusted_connection=yes;', db.dbo.tabl) 



  fetch next from my_cur into @col_name
  end

close my_cur
deallocate my_cur
go

Но я не понимал, что @col_name будет рассматриваться как строка, а не как объект (столбец)

Есть ли способ обойти это дело или какое-нибудь альтернативное решение?

Ответы [ 2 ]

5 голосов
/ 05 января 2010

Я думаю, что заполнение этих значений по умолчанию - это наименьшая из ваших проблем.

Я бы посоветовал взглянуть на это: Основы проектирования реляционных баз данных

И если вы все еще хотите это сделать, возможно, было бы лучше получить все значения по умолчанию со связанного сервера, поместить их во временную таблицу и затем присоединиться к information_schema.columns для заполнения вашей таблицы. , Возможно, вам понадобится транспонировать данные, чтобы они работали.

1 голос
/ 05 января 2010

Вам нужно будет сгенерировать оператор INSERT как динамический SQL, а затем выполнить его

Declare @InsertStatement VarChar (Max)

SET @InsertStatement = ''

SET @InsertStatement = @InsertStatement + ' Insert into db.dbo.tabl (' + @col_name + ') '
SET @InsertStatement = @InsertStatement + ' select ' + @col_name + ' from openrowset(''sqlncli'', ''server=my_server'';  '

Exec Sp_SQLExec @InsertStatement
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...