2009-10-29 25 views
42

BLOBをvarbinary(MAX)フィールドに簡単に挿入するにはどうすればよいですか?引数のためにSQL Server管理スタジオを使用してデータベースにBLOBを挿入する方法

は私が挿入したい事があると仮定します。c:\ picture.png 表は mytableは列ですがmypictureblob で、場所はRECIDさ= 1

I私はしばらくの間グーグルグーグルであり、私は簡単な解決策を見つけることができません。

ありがとう!

答えて

56

SQL Server Management Studio内のT-SQLを使用して、特にOPENROWSETコマンドを使用して、varbinary(max)フィールドに挿入できます。

例えば

:この場合は、ファイルのパスが対象とSQLに相対的であることを

INSERT Production.ProductPhoto 
(
    ThumbnailPhoto, 
    ThumbnailPhotoFilePath, 
    LargePhoto, 
    LargePhotoFilePath 
) 
SELECT ThumbnailPhoto.*, null, null, N'tricycle_pink.gif' 
FROM OPENROWSET 
    (BULK 'c:\images\tricycle.jpg', SINGLE_BLOB) ThumbnailPhoto 

が良い例は、次のドキュメントを見てみましょう/ウォークスルー

Working With Large Value Types

注意このコマンドを実行しているクライアントではありません。

+0

TSQLは、上部のツールバーの[新しいクエリ]ボタンと同じですか? – Toad

+0

T-SQLは、SQL Serverが使用するクエリ言語です。はい、新しいクエリを作成する必要があります...... –

+0

ありがとう!これは渦を与えるでしょう – Toad

1

mgmt studioからする必要がありますか?ここでは、CMDラインからそれを行う方法は次のとおりです。

"C:\ Program Files \ MicrosoftのSQLサーバ\ MSSQL \ Binnの\ TEXTCOPY.exe"/S <サーバー>/D <データベース>/T mytableは/ Cのmypictureblob/Fは、 "C:\ picture.png"/W "RecId ="/I

+0

euh .... okですが、どのデータベースに接続すればよいかは分かりますか? – Toad

+0

申し訳ありませんが、コメントの一部が縞模様になっているようです。/Sオプションはサーバ、/ Dはデータベース – cagreen

+0

こんにちは!ありがとう!しかし、パスワード/ユーザ名はどうですか? – Toad

0

Ok ...これは長すぎました。 SQL管理スタジオツールは、このような単純なものではありません(これは、クエリのタイムアウトを設定する場所を探すときに気づいたもので、4つの異なる場所で行われました)。

私は他のものをダウンロードしましたSQLエディタパッケージ(私の場合はSQLマエストロ)。そして、それは、ブロブを見て、これらのフィールドに新しいブロブをロードできるブロブエディタを含みます。

入力いただきありがとうございます!

12

MSDNの記事はWorking With Large Value Types ですが、インポートの仕組みを説明しようとしていますが、2つのことが一緒になるため少し混乱することがあります。ここでは単純化されたバージョンがあり、2つの部分に分かれています。単純なテーブルを想定:

CREATE TABLE [Thumbnail](
    [Id]  [int] IDENTITY(1,1) NOT NULL, 
    [Data]  [varbinary](max) NULL 
CONSTRAINT [PK_Thumbnail] PRIMARY KEY CLUSTERED 
(
[Id] ASC 
)) ON [PRIMARY] 

あなたは(SSMSで)実行している場合:

SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) 

それは結果がBulkColumnという名前の列を持つ表のように見えることが表示されます。残りはちょうどあなたのテーブルには、またはあってもなくてもよい複数のカラムでのインサートにそれを当てはめている

INSERT [Thumbnail] (Data) 
SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) 

:あなたのようなINSERTでそれを使用することができます理由です。 FOOを選択した結果の名前を指定すると、SELECT Foo.BulkColumnを使用して、その定数の後にテーブルの他のフィールドを追加することができます。

もっと複雑になるポーズは、そのデータをファイルにエクスポートして、それがまだOKであることを確認する方法です。あなたはCMDライン上で実行する場合:4つの追加「のparams」のために泣き言を開始するために起こっていると誤解を招くようなデフォルト値を与える

bcp "select Data from B2B.dbo.Thumbnail where Id=1" queryout D:\T\TestImage1_out2.dds -T -L 1 

(変更されたファイルになりますwhihc)。あなたは、最初のものを受け入れる0に第二を設定し、第3および第4 assept、または明示することができます:

Enter the file storage type of field Data [varbinary(max)]: 
Enter prefix-length of field Data [8]: 0 
Enter length of field Data [0]: 
Enter field terminator [none]: 

そして、それが要求されます:

Do you want to save this format information in a file? [Y/n] y 
Host filename [bcp.fmt]: C:\Test\bcp_2.fmt 

を追加、それを実行する必要が次回-f C:\ Test \ bcp_2.fmtそしてそれは泣き声を止めるでしょう:-) 多くの時間と悲しみを節約します。

+0

)で提供されていません。 – Toad

+1

FROM句に別名を指定する必要があります –

5

TSQLでBLOBを選択するために、2つの方法があります。

SELECT * FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a 

と同様に:

SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a 

は必須であるFROM句の後に相関名を注意してください。

これで、INSERT SELECTを実行してINSERTすることができます。

How To Update A BLOB In SQL SERVER Using TSQLで説明したように、2番目のバージョンを使用して更新を行うこともできます。六角フォーム(管理Studio)で管理アプリケーションでそれを見るために

select * from openrowset (bulk 'c:\path\filename.ext',single_blob) a 

:あなたは、単にSQLサーバー・マシン上のディスクからファイルを読み取ることができますしかし

2

したがって、たとえばデータベースをファイル(サーバー上のローカル)にバックアップし、上記のステートメントで別の場所にダウンロードすることができます。

関連する問題