問題タブ [varbinary]
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.
sql-server - 画像フィールドを持つ SQL Server テーブルのパフォーマンスを向上させる方法は?
私は職場で非常に特定のパフォーマンスの問題を抱えています!
私たちが使用しているシステムには、現在のワークフロー プロセスに関する情報を保持するテーブルがあります。フィールドの 1 つは、プロセスに関するメタデータを含むスプレッドシートを保持します (理由は聞かないでください!! 変更できません!!)
問題は、このスプレッドシートが SQL Server 2005 (SQL 2000 互換のデータベース セット内) の IMAGE フィールドに格納されていることです。
このテーブルには現在 22,000 行以上あり、次のような単純なクエリもあります。
Query Analyser でデータを取得するのに 30 秒かかります。
SQL 2005 への互換性を更新することを考えています (アプリがそれを処理できると知らされたら)。
私が考えている 2 番目のことは、列のデータ型を変更することですが、varbinary(max)これを行うとアプリケーションに影響するかどうかはわかりません。
私が検討しているもう 1 つのことは、現在のようsp_tableoptionに を に設定するために使用するlarge value types out of rowことですが、これを行うとパフォーマンスが向上するかどうかについては情報がありません。10
そのようなシナリオでパフォーマンスを向上させる方法を知っている人はいますか?
明確にするために編集
私の問題は、アプリケーションが SQL Server に何を要求するかを制御できないことです。また、いくつかのリフレクションを実行し (アプリは .NET 1.1 Web サイトです)、問題のあるフィールドを、私にはわからない内部的なものに使用します。それは何ですか。
このテーブルの全体的なパフォーマンスを改善する必要があります。
sql-server - パラメータ化されたクエリを使用して、SQL ServerのVarBinary列からバイト配列を返すことはできますか?
ADOを使用してSQLServerのVarBinary列にバイナリデータとしてファイルをアップロードおよびダウンロードすることをテストするための小さなVBAプロシージャを作成しました。アップロードプロセスは機能しているように見えますが、ダウンロードプロセスを機能させることができません。
VarBinaryの出力パラメータが正しく設定されていないと思いますが、正しく設定する方法に関するドキュメントが見つかりません。
実行時エラー3708「パラメータオブジェクトが正しく定義されていません。一貫性のない、または不完全な情報が提供されました。」が表示されます。ラインで.Parameters.Append .CreateParameter("@myblob", adVarBinary, adParamOutput)
更新:SELECT ? = myblob FROM bin_table WHERE ID = ?;バイナリ配列ではなく、バイナリ文字列を返しているようです。これが問題の原因だと思いますが、それを修正する方法がまだわかりません。
更新.Value:行末にaddingを追加することで、コンパイルエラー「型の不一致:配列またはユーザー定義型が必要です」を修正しましたWriteFile "C:\some_new_file.pdf", .Parameters("@myblob")。
どんな助けでも大歓迎です。ありがとう!
sql-server - SQL Server で varbinary フィールドを検索するには?
ユーザーがファイル、主に PDF および Word ドキュメントをアップロードできるようにするアプリケーションがあります。これらのファイルは、データベースの varbinary フィールドに保存されます。ユーザーがどのようにアプリケーションにアクセスしているかに関係なく、Web または Windows フォーム アプリケーションまたはその他のプレゼンテーション レイヤーを介してこれらのファイルを利用できるようにする必要があります。
これらのフィールドの生のテキスト コンテンツを検索する方法はありますか? たとえば、履歴書をアップロードする場合、ユーザーが C# を検索して、指定したテキストの varbinary フィールドの内容を確認できるようにしたいと考えています。
また、これを処理するためのより良い戦略があれば、私はそれを受け入れます.
c# - Linq To Sql Binary フィールドを null に設定する
Binary フィールドを null に設定しようとすると、ArgumentNull 例外が発生します。このようにフィールドを空に設定できますnew Binary(new byte[] {});が、それはnullではなく、空の列です。LinqToSql を使用した回避策はありますか?
mysql - HIbernate と MySQL を使用して varbinary 列から文字列を取得する際の問題
これが私のシナリオです。Hibernate を使用して、MySQL にアジア文字を含む一連の文字列を保存します。これらの文字列は、varbinary 列に書き込まれます。保存操作中はすべて正常に動作します。DB には正しい値 (バイトのシーケンス) が含まれています。保存した文字列を (再び Hibernate を使用して) クエリすると、正しい結果が得られます。しかし、Hibernate が文字列が属するエンティティに DB の値を入力すると、それらを取得したクエリで使用した値とは異なる値が得られます。正しい値を受け取る代わりに、一連の FFFD 置換文字を受け取ります。
例: DB に「하늘」を保存してクエリを実行すると、結果の文字列は \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD になります。
- DB 接続には、次のパラメーター セット useUnicode=true&characterEncoding=UTF-8 があります。
Hibernate に次の構成を使用してみましたが、問題は解決しませんでした:
- connection.useUnicode = true
- connection.characterEncoding = UTF-8ちなみに、MySQL カラムが varchar 型の場合、これはすべて正常に機能します。私は何が欠けていますか?助言がありますか?ありがとう
sql-server - SQLサーバーのクエリから従来のASPへのvarbinary出力の取得
SQL Server 2005 で実行されているクエリからクラシック ASP に varbinary 出力値を取得しようとしています。ASP の実行は、単純に varbinary 出力を文字列に取り込んでいるコードの一部になると失敗します。ですから、別の方法で処理する必要があると思います。
実際、データベース接続のアプリケーション ロールを設定 (sp_setapprole) および設定解除 (sp_unsetapprole) しようとしています。最初に approle を設定し、次に必要なクエリを実行して、最後に approle の設定を解除しました。設定解除中は、'exec sp_unsetapprole @cookie' のようなクエリを作成できるように、ASP コードで Cookie (varbinary) 値が必要なときです。この段階では、Cookie (varbinary) の値はありません。
私がこれを行っている理由は、アプリの役割を設定しようとしたときに「sp_setapprole が正しく呼び出されませんでした」というエラーを取得していたためです。'OLE DB Services = -2;Pooling=False' を接続文字列に追加して、プールを無効にしました。
プーリングがパフォーマンスの面で役立つことは知っていますが、ここで大きな問題に直面しています。
従来の ASP ファイルに varbinary 値を取得するか、アプリの役割を設定および設定解除する方法を提案してください。いずれにせよ、解決策は高く評価されます。
ありがとう、ナンダゴパル
c# - Database.ExecuteNonQuery が返されない
非常に奇妙な問題があります。SqlCommand.ExecuteNonQuery を使用して C# から特定のデータベース ストアド プロシージャを実行すると、ストアド プロシージャが実行されません。
さらに、SQL プロファイラーはコマンドをまったく登録しません。コマンド タイムアウトを受信せず、例外もスローされません。
最も奇妙なことは、このコードが 1,200,000 回以上正常に機能したことですが、データベースに挿入しようとしているこの 1 つの特定のファイルについては、永遠にハングアップするだけです。
アプリケーションを強制終了すると、データベース サーバーのイベント ログに次のエラーが表示されます"A fatal error occurued while reading the input stream from the network. The session will be terminated (input error: 64, output error: 0).。 SQL プロファイラーはそうではないと言っていますが、データベース サーバーがコマンドを受信していると思われます。
適切なアクセス許可が設定されていること、およびこのコードとストアド プロシージャが他のファイルで正常に動作するため、接続文字列が正しいことを知っています。
以下は、ストアド プロシージャを呼び出すコードです。挿入しようとしているファイルが 33.5 MB であることに注意することが重要かもしれませんが、500 MB を超えるファイルを 10,000 個以上追加したため、サイズは問題ではないと思います。 :
呼び出しを行っているサーバーとデータベース サーバーの間にファイアウォールはなく、この問題をトラブルシューティングするために Windows ファイアウォールが無効になっています。
php - ストアド プロシージャを介して送信される大きな変数のアクセス許可 (SQL Server)
ストアド プロシージャの呼び出しを介して一度に 4000 バイトを超えるデータを受信できるようにする方法がわかりません。それぞれ約15〜20キロバイトの画像をテーブルに保存していますが、それらを取得してページに表示すると、サイズは常に正確に3.91 KB(または4000バイト)になります。
ストアド プロシージャには、一度に送信できるデータ量に制限がありますか? データを再確認しましたが、実際にはvarbinary(MAX)フィールドから最初の 4000 文字しか受け取っていません。
一度に 4k バイトを超える許可設定はありますか?
sql-server - SQL Server varbinary 列からのデータのアドホック取得
varbinary(max)デバッグ目的で、SQL Server データベースの列からバイナリ データを取得したいと考えています。
このデータをローカル バイナリ ファイルに格納する最も簡単な方法は何ですか?
SQL Server Management Studio (「結果をファイルに出力」オプションを使用) を使用してみましたが、生のバイナリ データではなく、16 進数でエンコードされたバイナリ文字列がファイルに出力されます。
c# - SQL Server:varbinary(max)フィールドに格納されているファイル(pdf、doc、txt ...)をCLRストアドプロシージャのファイルにコピーするにはどうすればよいですか?
この質問のフォローアップとしてこの質問をします。
bcpとxp_cmdshellを使用するソリューションは、私の望ましいソリューションではありませんが、ここに投稿されています。
とにかく、私はc#を初めて使用します(Delphi開発者であるため)。チュートリアルに従うことで、簡単なCLRストアドプロシージャを作成できました。
私の仕事は、ファイルをクライアントファイルシステムからサーバーファイルシステムに移動することです(サーバーにはリモートIPを使用してアクセスできるため、共有フォルダーを宛先として使用できません。そのため、CLRストアドプロシージャが必要です)。
だから私はするつもりです:
- Delphiから一時テーブルのvarbinary(max)列にファイルを保存します
- CLRストアドプロシージャを呼び出して、varbinary(max)フィールドに含まれるデータを使用して目的のパスにファイルを作成します
C:\ MyFile.pdfをZ:\ MyFile.pdfに移動する必要があるとします。ここで、C:はローカルシステムのハードドライブであり、Z:はサーバーのハードドライブです。Cはニューヨークにあり、Zはロンドンにあり、それらの間にVPNはなく、https接続だけです。
誰かがそれを機能させるために変更できる(機能していない)以下のコードを提供しますか?ここでは、ID(int)とDATA(varbinary(max))の2つのフィールドを持つMyTableというテーブルがあると仮定します。テーブルが実際の一時テーブルであるか、データを一時的に保存するテーブルであるかは、違いがないことに注意してください。いくつかの例外処理コードがあれば幸いです(「ファイルを保存できません」という例外を管理できるようにするため)。
新しいファイルを書き込んだり、既存のファイルを上書きしたりできるようにしたいと思います。
(1つのサブ質問は次のとおりです。このアプローチは正しいですか、それともデータをCLRストアドプロシージャに直接渡す方法があるので、一時テーブルを使用する必要はありませんか?)
サブ質問の答えが「いいえ」の場合、一時テーブルを回避する方法を説明してください。それで、私が上で説明したもの(=一時テーブル+ストアドプロシージャ)よりも良い方法はありますか?クライアントアプリケーションからCLRストアドプロシージャにデータストリームを直接渡す方法はありますか?(私のファイルは任意のサイズにすることができますが、非常に大きくすることもできます)