0

File Contentという名前の列と多くの行を持つデータベース テーブルがあります。必要なのは、列の行ごとにテキスト ファイルを作成することですFile Content

例:

Sr.        File Name        File Content

1.         FN1              Hello
2.         FN2              Good Morning
3.         FN3              How are you?
4.         FN4              Where are you?

4 つの行があるとすると、4 つのテキスト ファイルを作成する必要があります (任意の名前を付けることができます)。

  1. File1.txt「こんにちは」というテキストが含まれている必要があります。
  2. File2.txt「おはよう」というテキストが含まれている必要があります。
  3. File3.txt「お元気ですか?」というテキストが必要です。初期化。
  4. File4.txt"Where are you?" というテキストが必要です。初期化
4

2 に答える 2

2

TSQLで行う必要があるとおっしゃっていましたが、可能であればそのようにはしません。RAMは1つの解決策を示しましたが、xp_cmdshellを使用する必要があり、SQL Serverサービスアカウントには、ファイルを配置する場所にあるファイルシステムにアクセスするためのアクセス許可が必要であるという欠点があります。

私の提案は、スクリプトまたは小さなプログラムを好みの言語(PowerShell、Perl、Python、C#など)で記述し、代わりにそれを使用することです。言語としてのTSQLは、ファイルの操作やデータベース外の処理にはまったく適していません。明らかに可能ですが(CLRプロシージャは別の方法です)、アクセス許可、エンコーディング、および外部言語で処理するのがはるかに簡単なその他の問題に遭遇することがよくあります。

于 2012-06-02T14:16:57.260 に答える
2

これは、SQL サーバーの BCP OUT 構文で実行できます。

セットアップの場合: サーバーで xp_cmdshell exec 権限があることを確認してください。これは master.sys.configurations テーブルから確認できます。サーバーまたはネットワーク共有に対応するファイルの場所のパスも変更します。テーブルに4つのレコードがあるため、確認したところ、4つのファイルを生成できました。

use master
go

declare @DSQL Nvarchar(max)
declare @counter int
declare @maxrows int
declare @filename Nvarchar(30)

select @counter=1, @maxrows = 0

create table t1 (
 sno int identity(1,1) not null,
 filename varchar(5),
 filecontent varchar(100)
)

insert into t1
select 'FN1', 'Hello'
UNION
select 'FN2', 'Good Morning'
UNION
select 'FN3', 'How are you?'
UNION
select 'FN14', 'Where are you?'

select @maxrows = count(*) from t1

--SELECT * FROM T1

while (@counter <= @maxrows)
begin
  select @filename = filename from t1
   where sno = @counter
select @DSQL = N'exec xp_cmdshell' + ' ''bcp "select filecontent from master.dbo.T1 where sno = ' + cast(@counter as nvarchar(10)) + '" queryout "d:\temp\' + @filename + '.txt" -T -c -S home-e93994b54f'''

print @dsql
exec sp_executesql @DSQL
   select @counter = @counter + 1
end

drop table t1
于 2012-06-02T13:40:59.473 に答える