問題タブ [sqlfilestream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - SQL Server2008FILESTREAMのパフォーマンス
SQLServer2008のFILESTREAM機能についていくつか質問がありました。
FILESTREAM機能を使用してSQLServer2008からストリーミングされたファイルを返す場合と、共有ディレクトリからファイルに直接アクセスする場合のパフォーマンスの違いは何でしょうか。
100人のユーザーが10秒のウィンドウ内に100個の100Mbファイル(FILESTREAM経由で保存)を要求した場合、SQL Server 2008のパフォーマンスは低下しますか?
delphi - Office 2010 64 ビット ファイルを処理する 32 ビット アプリケーションを使用する場合に存在する問題はどれですか?
ファイルを処理する 1 つのアプリケーションをテストしています (SQL Server を使用して格納されていますFILESTREAM
)。これは Delphi 32 ビット アプリケーションです。
データベースに保存されている XLS ドキュメント (元々は Office 2003 で保存されたもの) を開くと、Excel 2010 64 ビットからエラーが発生します。Office 2010 64 ビットと 32 ビット アプリケーションの既知の互換性の問題はありますか?
エラー メッセージとワークフロー
ファイルを開くと、Excel で次のいずれかのエラー メッセージが表示されます。
-
内容に問題があるため、ファイル FILE を開くことができません
-
一部のパーツが欠落しているか無効であるため、ファイルを開くことができません
Office 2007 を使用してマシン A でファイルを開くと、問題なくファイルが開きます。Office 2010 を使用してコンピューター B で同じファイルを開くと、エラー メッセージが表示されます。マシン A で再度開くと、エラー メッセージも表示されます。これらのすべてのステップで、データベースから読み取るだけで、書き込みは行いません。では、なぜこのようなことが起こるのでしょうか?
ドキュメントを開くにはどうすればよいですか?
varbinary(max)
特定の ID_Documentの「DOCUMENT」フィールドを取得するための SELECT クエリ。- を使用してデータベースから抽出
TBlobField(sqlQuery.FieldByName('DOCUMENT')).SaveToFile(sDestinationPath + FileUniqueName + .zip');
- を使用して、あるパスから別のパスにファイルをコピーします
Windows.CopyFile
TZipforge
コンポーネントを使用してファイルを解凍します- 関数を使用して、解凍したファイルの属性を ROM に設定し
FileSetReadOnly
ます。 - を使用してドキュメントを開く
ShellExecute(0, 'open', PWideChar(FIleName), '', '', SW_SHOWNORMAL);
ご覧のとおり、データベースに書き戻すものは何もありません。ファイルが抽出されるTBlobField
と、解凍して開く前に別の場所にコピーされます。
インストールが壊れている可能性があります
Office が再インストールされ、すべてが機能するようになりました。破損の問題は、「Office インストールを修正しますか?」と尋ねた、開いている Office インストールとの競合が原因でした。とにかく、何が起こったのか理解できないので、問題はまだ残っています。ファイルをフォルダーに抽出し、データベースに何も書き戻さずにフォルダーからファイルを開くと、データベース内のファイルが破損する可能性がありますか?
sql-server - VARBINARY(MAX)フィールドを持つテーブルのINSERTスクリプトを生成するにはどうすればよいですか?
フィールドのあるテーブルがありVARBINARY(MAX)
ます(SQL Server 2008 with FILESTREAM
)
私の要件は、本番環境にデプロイするときに、特定の順序で実行されるSQLスクリプトのグループのみをITチームに提供できることです。私が本番環境で作成している新しいテーブルには、このVARBINARY(MAX)
フィールドがあります。通常、新しいテーブルを使用して、CREATE TABLE
スクリプトをスクリプト化します。また、使用する必要のあるデータがある場合は、INSERT
スクリプトを作成します。それほど複雑ではありません。
しかし、を使用すると、ステートメントVARBINARY(MAX)
の生成に使用していたストアドプロシージャは、そのテーブルで失敗します。INSERT
そのフィールドを選択し、印刷し、コピーし、16進数に変換するなどしてみました。それに関する主な問題は、フィールド内のすべてのデータが選択されないことです。チェックを行いDATALENGTH([FileColumn])
、ソース行に1,004,382バイトが含まれている場合、再挿入時にコピーまたは選択されたデータを取得できる最大値は8000です。したがって、基本的には切り捨てられた(つまり無効な)データです。
どうすればこれをより良くすることができますか?私はこれを狂ったようにグーグルで試しましたが、何かが足りないに違いありません。ファイルシステムにアクセスできないことを忘れないでください。これはすべてスクリプト化する必要があります。
c# - sqlFileStream System.ComponentModel.Win32Exception: 要求はサポートされていません
Windows 7 (バージョン 6.1 ビルド 7601: Service Pack 1) と Visual Studio 2010 で SQL Server Express 2008 SP1 を使用しています。
次のコードを使用して、ファイルをファイル ストリームに挿入するためのストアド プロシージャ CLR を作成しようとしています。
ただし、行に到達すると:
私は得る:
ユーザー定義ルーチンまたは集計 "sp_fileController" の実行中に .NET Framework エラーが発生しました:
この問題を解決する方法を教えてもらえますか? SQL 2008エクスプレスエディションでこの方法でコードを実行できないということですか?
asp.net - WebAPI 経由で SqlFileStream をストリーミングする
FILESTREAM をサポートする SQL データベースをセットアップし、WebAPI を介して SqlFileStream を使用してデータベースから取得したファイルをブラウザーにストリーミングしようとしています。
何らかの理由で機能しませんが、適切なエラー メッセージが表示されません。ブラウザーは接続を中止するだけで、Fiddler も有用なものを何も表示せず、VS でエラーがスローされないようです。
TransactionScope が早期に閉じられていることに問題があるのではないかと思いますか? エラーメッセージが表示されない理由はわかりません。
WebApiを介してSqlFileStreamをストリーミングする適切な方法は何ですか?
.net - SQL FILESTREAM データのファイル サイズの処理
SQL Server の FILESTREAM 機能を使用してドキュメントをデータベースに保存する場合、ファイル サイズを処理する適切な方法は何ですか?
ファイルストリーム列でTSQL コマンドを使用できることは知っていますが、この Microsoft の記事DATALENGTH()
に関しては、これが常に最良のアイデアであるとは限りません。
アプリケーションで大量の BLOB ファイルのデータ長を取得することは避けてください。サイズは SQL Server データベース エンジンに保存されないため、これは時間のかかる操作です。BLOB ファイルの長さを決定する必要がある場合は、Transact-SQL DATALENGTH() 関数を使用して、BLOB が閉じている場合のサイズを決定します。DATALENGTH() は、BLOB ファイルを開いてそのサイズを決定するわけではありません。
上記が可能であれば DATALENGTH() を避けるべきだと言っているのか、それともファイルサイズを取得するための推奨される方法なのか、私には少しわかりません。
メタデータとしてユーザーに表示するためにドキュメント サイズに頻繁にアクセスする必要がある場合、それらを取得するための推奨される方法は何ですか? それらを別のフィールドに保存しますか?または、datalength() は十分に高速ですか?
sql-server - 重複が原因で、SQLサーバーのファイルストリームフォルダー数がテーブル数と一致しませんか?
myTable
としてフラグが立てられたフィールドを持つテーブル ( ) がありFilestream
ます。このサーバーでは、それが唯一のファイルストリームであり、ファイルストリームの場所に保存されます。F:\foo
SELECT COUNT(1) FROM myTable
結果は 37,314 になりますが、のフォルダー プロパティF:\foo
は 36,358 ファイルです。すべての行myTable
の Filestream 列にデータがありますが、これは 956 個が完全に重複していたことを意味しますか?
もしそうなら、SQL Serverは何が重複していて何が重複していないかをどのように判断しますか(それは完全なバイナリ比較ですか?ブロック差分レベルでデータを保存する価値があるとは思わないので)? ファイルストリームの重複レコードを統合するSQL Serverに関する情報が見つからないようです。
さらに、同じレコードの多くを再度保存すると (カウントが 45,000 になると)、合計ファイル数がF:\foo
増加します。これは、重複チェック (そのようなものがある場合) が完全ではないことを示しています。
SQL Server は、ファイル ストリーム内の同様のファイルをまとめて統合しますか? SQL でファイル ストリーム ファイル グループを再スキャンし、さらに重複を探して既存の領域を統合するために実行できるストアド プロシージャはありますか?
問題のサーバーは SQL Server 2012 Enterprise with SP1 ですが、UAT SQL Server 2012 Standard Edition with SP1 ボックスでも発生しました。
c# - LINQ での SQL Server ファイルストリームの使用
LINQ を使用してデータベース内の BLOB ファイルにアクセスすると、次のように動作します。
このテーブルで Filestream をアクティブにすると、LINQ は T-SQL を介してデータベースにクエリを実行します。これは、大きなファイルでは悪い習慣です。
このサイトによると:http://www.codeproject.com/Articles/128657/How-Do-I-Use-SQL-File-StreamSqlCommand
、パスのクエリで実行し、ファイルに直接アクセスする必要がありますSqlFileStream
.
より洗練された (より「LINQ-er」な) 方法でファイルにアクセスできるようになりましたか?