問題タブ [sql]

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.

0 投票する
6 に答える
6218 参照

sql - 複雑なOracle PL/SQLカーソルロジックをビューとしてカプセル化する最良の方法は?

私はPL/SQLコードを書いて、テーブルを非正規化し、クエリを実行しやすい形式にしました。このコードでは、一時テーブルを使用して作業の一部を実行し、元のテーブルのいくつかの行を一緒にマージします。

ロジックは、リンクされた記事のパターンに従って、パイプライン化されたテーブル関数として記述されます。表関数は、PRAGMA AUTONOMOUS_TRANSACTION宣言を使用して一時表操作を許可し、カーソル入力パラメーターを受け入れて非正規化を特定の ID 値に制限します。

次に、テーブル関数をクエリするためのビューを作成し、考えられるすべての ID 値をカーソルとして渡します (関数の他の使用法はより制限されます)。

私の質問: これは本当に必要ですか? 同じことを達成するためのはるかに簡単な方法を完全に見逃していませんか?

PL/SQL に触れるたびに、入力しすぎているような印象を受けます。

更新:私が扱っているテーブルのスケッチを追加して、私が話している非正規化のアイデアをすべての人に提供します。このテーブルには、従業員の仕事の履歴が格納され、それぞれにアクティブ化行と (場合によっては) 終了行があります。従業員が複数の仕事を同時に持つことも、連続していない日付範囲で何度も同じ仕事をすることも可能です。例えば:

それを照会して、誰がいつどの仕事で働いているかを把握することは自明ではありません。EMP_IDしたがって、私の非正規化関数は、カーソルを介して渡されたすべての s について、各ジョブの日付範囲のみを一時テーブルに入力します。s 1 と 2 を渡すEMP_IDと、次のようになります。

(終了日が事前に決められていないジョブの をEND_DATE許可します。)NULL

ご想像のとおり、この非正規化形式はクエリがはるかに簡単ですが、それを作成するには (私が知る限りでは) 中間結果 (たとえば、アクティベーション行が実行されたジョブ レコード) を格納するための一時テーブルが必要です。見つかりましたが、終了ではありません...まだ)。パイプライン化されたテーブル関数を使用して一時テーブルにデータを入力し、その行を返すことは、私がその方法を理解した唯一の方法です。

0 投票する
7 に答える
81739 参照

sql - SQL Server 2005 - プログラムでテーブルをエクスポートします (.sql ファイルを実行して再構築します)

テーブルを含むデータベースがあります Customers いくつかのデータ

を持っています オフィスに別のデータベースがありますが、すべて同じですが、私のテーブル Customers は空

です SQL Server 2005 (T-SQL) ですべてを取得する sql ファイルを作成するにはどうすればよいですか最初のデータベースのCustomersテーブルで、たとえばbuildcustomers.sqlを作成します。そのファイルを圧縮し、ネットワークを介してコピーし、SQL Serverで実行すると出来上がりです! my table Customers is full

データベース全体に対して同じことを行うにはどうすればよいですか?

0 投票する
4 に答える
5982 参照

sql - SQL 統計を削除しても問題ありませんか?

多くの列を null 許容から null 非許容に変更しようとしてきました。これには、関連付けられたすべてのオブジェクトを削除し、変更を加え、関連付けられたオブジェクトを再作成することが含まれます。

スクリプトを生成するために SQL Compare を使用してきましたが、SQL Compare は統計オブジェクトのスクリプトを作成しないことに気付きました。これは、それらをドロップしても問題がなく、データベースが以前と同じように機能することを意味するのでしょうか、それとも Red Gate がトリックを逃したのでしょうか?

0 投票する
6 に答える
2441 参照

c# - PHPファイルでSQLを解析するための最良のアプローチ?

卒業論文では、準備済みステートメントを使用して SQL インジェクションの脆弱性を自動的に検出し、修正を提案するプログラムを開発しました。具体的には、PHP の mysqli 拡張機能です。SO コミュニティに対する私の質問は次のとおりです。PHP ソース コード内の SQL を検出するために、どのようなアプローチをお勧めしますか?

を含む列挙型を使用しSQL keywords (SELECT, INSERT, ...)、基本的に各行を解析し、列挙型を繰り返し処理して、SQL が存在するかどうかを判断しました。さらに、パーサーが html を誤って検出していないことを確認する必要がありました (たとえば、<\select>)。

私にとっては、このソリューションはうまく機能しましたが、今はもう少し時間があり、コードをリファクタリングして、よりエレガントな (そして効率的な) ソリューションを使用することを考えています。私がプログラムを書いたのはC#の使用に限定してください。

0 投票する
10 に答える
92644 参照

sql - INNER JOIN の一部で LIKE 句を使用する

ストアド プロシージャ/クエリを作成するときに、INNER JOIN の一部として LIKE 条件を使用できますか? 正しいことを聞いているかどうかわからないので、説明させてください。

テキストを含む列で検索するキーワードのリストを取得するプロシージャを作成しています。コンソールに座っていたら、次のように実行します。

しかし、ストアド プロシージャで "厳密に型指定された" リストの解析を行うために少し前に見つけたトリックは、リストをテーブル変数/一時テーブルに解析し、それを適切な型に変換してから、そのテーブルに対して INNER JOIN を実行することです。私の最終結果セットで。これは、たとえば整数 ID のリストをプロシージャに送信する場合にうまく機能します。最終的なクエリは次のようになります。

このトリックを文字列のリストで使用したいと思います。しかし、特定のキーワードを探しているので、LIKE 句を使用します。したがって、理想的には、最終的なクエリを次のようにすることを考えています。

これは可能ですか、推奨されますか?

このようなことを行うより良い方法はありますか?


文節の両端にワイルドカードを入れているのは、カード テキストで使用される「魔王」、「獣戦士」、「直接ダメージ」、「戦闘ダメージ」という用語があるためです。

パフォーマンスに応じて、指定したクエリを使用するか、全文キーワード検索を使用して同じタスクを実行できるかという印象を受けます。

テキスト検索したいフィールドでサーバーにテキスト インデックスを作成させる以外に、他に何かする必要がありますか?

0 投票する
4 に答える
33584 参照

sql - SQL Server - ダーティ リードの長所と短所

ダーティ リードを使用する必要がある、または使用しない理由:

SQLサーバーで?

0 投票する
6 に答える
115894 参照

sql - タグまたはタグ付けに推奨される SQL データベース設計

タグ付けを実装する方法をいくつか聞いたことがあります。TagID と ItemID の間のマッピング テーブルを使用する (私には理にかなっていますが、スケーリングしますか?)、固定数の可能な TagID 列を ItemID に追加する (悪い考えのように思えます)、コンマで区切られたテキスト列にタグを保持する (サウンドクレイジーですが、うまくいく可能性があります)。誰かがスパース行列を推奨しているとさえ聞いたことがありますが、タグ名はどのように適切に成長するのでしょうか?

タグのベスト プラクティスを見逃していませんか?

0 投票する
3 に答える
10345 参照

sql - MS Reporting Services で動的サブクエリを実行する最良の方法は?

私は SQL Server Reporting Services を初めて使用し、次のことを行う最善の方法を考えていました。

  • 人気のある ID のリストを取得するためのクエリ
  • 別のテーブルからプロパティを取得するための各アイテムのサブクエリ

理想的には、最終レポートの列は次のようになります。

これをすべて一度に実行する巨大な SQL クエリを構築する方法があるかもしれませんが、私はそれを区分化することを好みます。行ごとにサブクエリを実行する VB 関数を作成する推奨される方法はありますか? 助けてくれてありがとう。

0 投票する
6 に答える
1808 参照

c# - LINQ について何か不足していますか?

LINQ について何かが欠けているようです。私には、SQL の最も気に入らない要素をいくつか取り、それらを C# 言語に移して、他の用途に使用しているように見えます。

つまり、データベース以外で SQL に似たステートメントを使用する利点を理解できたということです。しかし、もし SQL を書きたいのなら、SQL だけを書いて C# から除外してはどうでしょうか? ここで何が欠けていますか?

0 投票する
11 に答える
5086 参照

sql - リレーショナルデータベースで順序を表す

データベースにオブジェクトのコレクションがあります。フォトギャラリーの画像、カタログの製品、本の章など。各オブジェクトは行として表されます。これらの画像を任意に並べ替えてデータベースに保存し、オブジェクトを表示するときに正しい順序になるようにしたいと思います。

たとえば、私が本を書いていて、各章がオブジェクトであるとします。私は自分の本を書き、章を次の順序で並べます。

はじめに、アクセシビリティ、形態と機能、エラー、一貫性、結論、索引

それはエディターに送られ、次の推奨される順序で返されます。

はじめに、フォーム、機能、アクセシビリティ、一貫性、エラー、結論、インデックス

この順序を堅牢で効率的な方法でデータベースに保存するにはどうすればよいですか?

私は次のアイデアを持っていますが、それらのどれにもわくわくしていません。

  1. 配列。各行には注文IDがあり、注文が変更されると(削除とその後の挿入によって)、注文IDが更新されます。これにより、検索が簡単になりますORDER BYが、壊れやすいようです。

    // REMOVAL
    UPDATE ... SET orderingID=NULL WHERE orderingID=removedID
    UPDATE ... SET orderingID=orderingID-1 WHERE orderingID > removedID
    // INSERTION
    UPDATE ... SET orderingID=orderingID+1 WHERE orderingID > insertionID
    UPDATE ... SET orderID=insertionID WHERE ID=addedID

  2. リンクリスト。各行には、順序付けの次の行のIDの列があります。ORDER BYここではトラバーサルにコストがかかるようですが、私が考えていない方法で使用できる場合があります。

  3. スペース配列。orderingID(#1で使用)を大きく設定して、最初のオブジェクトが100、2番目のオブジェクトが200などになるようにします。次に、挿入が発生したら、それをに配置し(objectBefore + objectAfter)/2ます。もちろん、これは時々リバランスする必要があるので、物事が近すぎないようにします(フロートを使用しても、最終的に丸め誤差が発生します)。

これらのどれも私には特にエレガントに見えません。誰かがそれを行うためのより良い方法を持っていますか?