2016-10-22 14 views
2

DBMSとしてMicrosoft SQL Server 2012を使用しています。フットボールプレーヤーについての情報を含むデータベースがあります。各プレーヤーに写真があり、プレーヤーの写真を自分のコンピュータにエクスポートする必要があるので、TSQLを使ってプレーヤーの写真を書き出すことができるので、写真を書き出すためにアプリケーションのプログラミングや編集はできません。ここでストアドプロシージャを使用してSQL Serverからイメージをエクスポート

は、私がこれまでにやったことです:

enter image description here

MY SQLコード:

EXECます。sp_configure '高度な表示オプション'、1 GO RECONFIGURE GO EXEC ます。sp_configure 'xp_cmdshellを' 1 GO RECONFIGURE GO

EXEC master..xp_cmdshell 'mkdir C:\ ImagesFromSql'

EXECがmaster..xp_cmdshell 'BCP " [FootballTeam]から選択した写真を[DBO] [プレーヤー]。。" queryout "C:\ ImagesFromSql \ TestImage.jpg" -T -N'

として私のフォルダImagesFromSqlは "C:\"上に作成されていますが、1つの写真はそこに保存されていますが、その写真は361MBと大きいので、おそらくデータベースに含まれるすべての写真のサイズですか? そして、私はこの場合、データベースからすべてのイメージを1つではなくどのようにエクスポートすることができ、その名前を設定することができるのだろうかと思います。たとえば、ImageNameをPlayerIDとして設定することができます。たとえば、1.jpg、2.jpg、3.jpg .... 650.jpg ...

後H.Fadlallahが、これは私が得るものであるいくつかの答えを示唆し@: enter image description here

それは、プレビュー画像に不可能..です:)再び

後に@ H.Fadlallahヘルプ私はこのクエリを実行しました:

DECLARE @ID as int [FootballTeam]の中から選択PlayerID FOR VARCHARとして@SQL(4000)

DECLAREのCSRカーソルを宣言する。[DBO] [プレーヤー]

OPENのCSR

は@ID

INTO NEXT CSRからのフェッチ

WHILE @@ FETCH_STATUS = 0は、VARCHARとして+ CAST(@ID(10) ' "[FootballTeam]。[DBO] [プレーヤー] PlayerID =から選択した写真" BCP'

SETの@SQL =をBEGIN )+ 'クエリアウト "C:\ ImagesFromSql \ '+ CAST(varchar(10)としての@ID)+' .jpg" -T -f C:\ ImagesFromSql \ formatfile.fmt '

EXECマスター..xp_cmdshellを@SQL

END

今、私は空の画像を取得しています

しかし、CSRのDEALLOCATEのCSRは、おそらく私が何かを逃した

CLOSE ...(ところで@ID INTO CSRから次のFETCH

imageと同じフォルダにformatfile.fmtファイルが作成され、H.Fadallahが別の投稿で私に提案したように、Photoの属性のバイナリ値を8から0に変更しました。

+0

これは非常に有用な質問ですが、私は、誰かがあなたが正しい答えを与えることを願っています!この質問にも私は答えが必要です! –

答えて

1

は、次のクエリを試してください:

EXEC sp_configure 'show advanced options', 1 

GO 
RECONFIGURE 
GO 
EXEC sp_configure 'xp_cmdshell', 1 
GO 
RECONFIGURE 
GO 

EXEC master..xp_cmdshell 'mkdir C:\ImagesFromSql' 


DECLARE @ID as int 
DECLARE @SQL as varchar(4000) 

DECLARE csr CURSOR FOR SELECT ID FROM [FootballTeam].[dbo].[Players] 

OPEN csr 

FETCH NEXT FROM csr INTO @ID 

WHILE @@FETCH_STATUS = 0 
BEGIN 


SET @SQL = 'BCP "SELECT Photo FROM [FootballTeam].[dbo].[Players] WHERE ID = "' + CAST(@ID as varchar(10)) + ' queryout "C:\ImagesFromSql\' + CAST(@ID as varchar(10)) + '.jpg" -T -N' 

EXEC master..xp_cmdshell @SQL 

FETCH NEXT FROM csr INTO @ID 

END 


CLOSE csr 
DEALLOCATE csr 
+0

最初の行は私にこのエラーを与えています:メッセージ102、レベル15、状態1、行1 'GO'付近の構文が正しくありません。 メッセージ102、レベル15、状態1、行1 'GO'の近くの構文が正しくありません。 –

+0

iエラーを再現しました。 – Hadi

+0

次のメッセージ:構成オプション 'show advanced options'が1から1に変更されました。インストールするRECONFIGUREステートメントを実行してください。 構成オプション 'xp_cmdshell'が1から1に変更されました。インストールするRECONFIGUREステートメントを実行します。 メッセージ102、レベル15、状態1、行11 'NEXT'の近くの構文が正しくありません。 メッセージ102、レベル15、状態1、行21 'NEXT'の近くの構文が正しくありません。 –

関連する問題