Sybase BCP - включает заголовок столбца - PullRequest
1 голос
/ 16 февраля 2011

Sybase BCP хорошо экспортирует, но включает только данные. Есть ли способ включить имена столбцов в вывод?

Ответы [ 4 ]

0 голосов
/ 31 мая 2017

Я создал представление с первой строкой, в которой имена столбцов объединены с реальной таблицей.

create view bcp_view
as 'name' col1, 'age' col2, ....
union
select name, convert(varchar, age),.... from people

Только не забудьте преобразовать любые столбцы без varchar.

0 голосов
/ 14 марта 2012

С помощью bcp вы не можете получить столбцы таблицы.

Вы можете получить его с помощью запроса:

select c.name from sysobjects o
inner join syscolumns c on o.id = c.id and o.name = tablename
0 голосов
/ 09 августа 2012

Я решил эту проблему не так давно с помощью proc, который будет перебирать столбцы таблиц и объединять их.Я удалил все проверки ошибок и процедуры оболочки из этого примера.это должно дать вам идею.Затем я перевел BCP из таблицы ниже в headers.txt, затем BCP перевел результаты в detail.txt и использовал dos copy / b header.txt + detail.txt file.txt, чтобы объединить записи заголовка и детали..эта стена все выполнено в пакетном скрипте.

В таблице вы будете BCP

    create table dbo.header_record
    (
      headers_delimited varchar(5000)
    )

Затем массируйте приведенные ниже команды в сохраненный процесс.используйте isql для вызова этого процесса до того, как ваш BCP извлечет.

 declare 
          @last_col int,
          @curr_col int,
          @header_conc varchar(5000),
          @table_name varchar(35),
          @delim  varchar(5),
          @delim_size int


  select 
    @header_conc = '',
    @table_name = 'dbo.detail_table',
    @delim = '~'

  set @delim_size = len(@delim)


  --
  --create column list table to hold our identity() columns so we can work through it
  --
  create local temporary table col_list
    (
      col_head int identity
      ,column_name varchar(50)
    ) on commit preserve rows

  --
  -- Delete existing rows in case columns have changed
  --
  delete from header_record


  --
  -- insert our column values in the order that they were created
  --
  insert into col_list (column_name)
  select 
    trim(column_name)
  from SYS.SYSCOLUMN --sybase IQ specific, you will need to adjust.
  where table_id+100000 = object_id(@table_name) --Sybase IQ 12.7 specific, 15.x will need to be changed.
  order by column_id asc

  --
  --select the biggest identity in the col_list table
  --
  select @last_col = max(col_head)
    from col_list

  --
  -- Start @ column 1
  --
  set @curr_col = 1

  --
  -- while our current columns are less than or equal to the column we need to
  -- process, continue else end
  --
  while (@curr_col <= @last_col)
  BEGIN

    select
      @header_conc = 
        @header_conc + @delim + column_name
        from col_list where col_head = @curr_col

     set @curr_col = @curr_col + 1   
  END

  --
  -- insert our final concatenated value into 1 field, ignore the first delimiter
  --
  insert into dbo.header_record
    select substring(@header_conc, @delim_size, len(@header_conc) )

  --
  -- Drop temp table
  --
  drop table col_list
0 голосов
/ 16 февраля 2011

AFAIK Очень трудно включить имена столбцов в вывод bcp.

Попробуйте бесплатную замену sqsh isql http://www.sqsh.org/ с функциями конвейера и перенаправления. F.E.

   1> select * from sysobjects
   2> go 2>/dev/null >/tmp/objects.txt

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

...