Sybase BCP は適切にエクスポートしますが、データのみを含めます。出力に列名を含める方法はありますか?
5509 次
4 に答える
0
AFAIKbcp出力に列名を含めることは非常に困難です。
パイプおよびリダイレクト機能を備えた無料のsqshisql置換http://www.sqsh.org/を試してください。Fe
1> select * from sysobjects
2> go 2>/dev/null >/tmp/objects.txt
必要な結果が得られると思います。
于 2011-02-16T07:48:14.203 に答える
0
bcp では、テーブルの列を取得できません。
次のようなクエリで取得できます。
select c.name from sysobjects o
inner join syscolumns c on o.id = c.id and o.name = tablename
于 2012-03-14T11:05:07.573 に答える
0
私はこの問題を少し前にprocがテーブルの列をループして連結することで解決しました。この例からすべてのエラー チェックとプロシージャ ラッパーを削除しました。これはあなたにアイデアを与えるはずです。次に、以下のテーブルから headers.txt に BCP し、結果を detail.txt に BCP し、dos copy /b header.txt+detail.txt file.txt を使用してヘッダーと詳細レコードを結合しました。 .this wall はすべてバッチ スクリプトで実行されます。
BCPするテーブル
create table dbo.header_record
(
headers_delimited varchar(5000)
)
次に、以下のコマンドをストアド プロシージャに挿入します。BCP が抽出する前に、isql を使用してこのプロシージャを呼び出します。
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
于 2012-08-09T16:53:22.273 に答える
-1
最初の行が実際のテーブルに結合された列名であるビューを作成しました。
create view bcp_view
as 'name' col1, 'age' col2, ....
union
select name, convert(varchar, age),.... from people
非 varchar 列を変換することを忘れないでください。
于 2017-05-30T21:16:11.007 に答える