タグ付けされた質問 「sql-server」

Microsoft SQL Serverのすべてのバージョン(MySQL以外)。sql-server-2016のようなバージョン固有のタグも追加してください。これは、質問に関連することが多いためです。

2
「LIKE OR LIKE、OR LIKE、OR LIKE、OR LIKE」のより良いアプローチ
この質問では、彼は私と同じ問題を抱えています。私は次のようなものが必要です: select * from blablabla where product like '%rock%' or like '%paper%' or like '%scisor%' or like '%car%' or like '%pasta%' これは醜く、インデックスを使用していません。この場合、これは実際にこれを行う唯一の方法です(文字列内の複数の単語を選択するため)、またはFULLTEXTを使用する必要がありますか? 私が理解しているように、フルテキストでは、文字列内の複数の単語を選択できます。 この質問は全文についても話します

2
フラグとテーブルの分割
私は(潜在的に)数千万のレコードを含むアイテムのテーブルを設計しています。一部のアイテムは、管理者によって「承認」されるまで使用できません。「使用」とは、そのような項目が「承認」されるまで他のテーブルで参照されないことを意味します。アイテムの最大50%は、いつでも「承認されない」可能性があります。レコードは「承認」される可能性がありますが、その逆はできません。 2つの設計オプションを検討します。 ビットフラグ 「未承認」アイテムの個別のテーブル-アイテムが承認されると、「通常」テーブルに移動されます(アイテムのIDの更新は問題ではありません) 2番目のオプションの方がはるかに良いと思います。ビットフラグは行ごとに1バイトしかとらないため、問題はありません。ただし、同じテーブルに100万件の承認済みレコードと100万件の未承認レコードがある場合、承認済みレコードを使用した操作のスキャン時間は増加します。 質問は、代わりに最初の(ビットフラグ)オプションを検討する必要がありますか?説明されている状況で何かメリットがありますか?

4
DELETEステートメントがREFERENCE制約と競合しています
私の状況は次のようになります: テーブルSTOCK_ARTICLES: ID *[PK]* OTHER_DB_ID ITEM_NAME テーブルの場所: ID *[PK]* LOCATION_NAME テーブルWORK_PLACE: ID *[PK]* WORKPLACE_NAME テーブルINVENTORY_ITEMS: ID *[PK]* ITEM_NAME STOCK_ARTICLE *[FK]* LOCATION *[FK]* WORK_PLACE *[FK]* INVENTORY_ITEMSの3つのFKは、明らかに、他のそれぞれのテーブルの「ID」列を参照しています。 ここに関連するテーブルは、STOCK_ARTICLEとINVENTORY_ITEMSです。 これで、上記のデータベースを別のデータベース(OTHER_DB)と「同期」するいくつかの手順(SQLスクリプト)で構成されるSQLジョブがあります。このジョブ内のステップの1つは「クリーンアップ」です。同じIDを持つ他のデータベースに対応するレコードがないSTOCK_ITEMSからすべてのレコードを削除します。次のようになります。 DELETE FROM STOCK_ARTICLES WHERE NOT EXISTS (SELECT OTHER_DB_ID FROM [OTHER_DB].[dbo].[OtherTable] AS other WHERE other.ObjectID = STOCK_ARTICLES.OTHER_DB_ID) しかし、このステップは常に失敗します: DELETEステートメントは、REFERENCE制約「FK_INVENTORY_ITEMS_STOCK_ARTICLES」と競合しました。データベース「FIRST_DB」、テーブル「dbo.INVENTORY_ITEMS」、列「STOCK_ARTICLES」で競合が発生しました。[SQLSTATE 23000](エラー547)ステートメントは終了しました。[SQLSTATE 01000](エラー3621)。ステップは失敗しました。 したがって、問題は、レコードがINVENTORY_ITEMSによって参照されている場合、STOCK_ARTICLESからレコードを削除できないことです。しかし、このクリーンアップは機能する必要があります。つまり、クリーンアップスクリプトを拡張して、最初にSTOCK_ITEMSから削除する必要のあるレコードを特定する必要がありますが、対応するIDがINVENTORY_ITEMS内から参照されているため、できません。次に、最初にINVENTORY_ITEMS内のレコードを削除してから、STOCK_ARTICLES内のレコードを削除します。私は正しいですか?SQLコードはそのときどのように見えますか? ありがとうございました。

2
グループに対して条件が満たされた行を選択(一時テーブルなし)
3列のテーブルがある場合: ID category flag 1 A 1 2 A 0 3 A 0 4 B 0 5 C 0 flag = 1カテゴリごとに少なくとも1回はあるすべての行を選択します。 予期された結果: ID category flag 1 A 1 2 A 0 3 A 0 次のような一時テーブルを使用して解決できます。 select ID into #tempTable from someTable where flag = 1 select * from someTable …

5
与えられた範囲の素数
最近、すべての素数(1〜100)を印刷するタスクが与えられました。私はそこに劇的に失敗しました。私のコード: Create Procedure PrintPrimeNumbers @startnum int, @endnum int AS BEGIN Declare @a INT; Declare @i INT = 1 ( Select a = @startnum / 2; WHILE @i<@a BEGIN @startnum%(@a-@i) i=i+1; ) END 完成せずに終わってしまいましたが、データベース(SQL Server 2008 R2)でこのようなプログラムを実行することは可能でしょうか。 はいの場合、どのように終了する可能性があります。

2
行圧縮とページ圧縮の違いを説明してください
どれを適用するか、いつ圧縮を適用するのが適切な時期かを判断しようとしています。この質問を投稿して、このコミュニティから洞察を得ます。私はいくつかの記事を読みましたが、DBアドミニストレーターでこれに対処する場所が必要でした。

1
クラスタ化インデックスシークと非クラスタ化インデックスシークの違い
クラスタ化インデックス(CI)シークと非クラスタ化インデックス(NCI)シークの違いは何ですか?一方が他方よりもパフォーマンスが良いですか? これを尋ねる理由は、5,000万行と150列のテーブルがあるためです。これにはID、クラスター化インデックスとして定義された名前の列があります。同じインデックスキーIDと7つのinclude-d列を持つNCIがもう1つあります。NCインデックスはここでは重複しており、安全に削除できるようです。 安全にドロップできる場合、またはそのままにしておく必要がある場合は、専門家の意見/アドバイスが必要ですか?

1
SQL ServerでHEAPフラグメンテーションを下げる方法は?
私は最近、1つのヒープテーブルに70%以上の断片化があることがわかりました。だから私はすることにしました ALTER TABLE dbo.myTable REBUILD 面白いことに、その後20%の断片化がありました。それ以来、そのテーブルへの書き込みはありませんでした。だから私はもう一度リビルドをすることにしました。 2回目以降は、テーブルハットの断片化が50%増えるため、さらに多くのことを実現できます。 どうしてこんなことが起こるのか本当にわかりません...

1
SQL Server Management Studio(SSMS)内のアクティビティモニターのSQLCLR待機タイプとは何ですか?
SQL Prodサーバーをチェックすると、アクティビティモニターを開くたびSQLCLRに、アクティビティモニターのリソース待機セクションの最初のリストに常に表示されます。それは常に高い数を持っています。何のSQLCLRため?SQLCLRアクティビティモニターでリソース待機数が多いサーバーに問題がありますか?

1
HADRワーカースレッドの使用率が高い
HADRプール内の可用性グループのワーカースレッド数が、「通常、レプリカあたり3〜10個の共有スレッドがある」という最小使用量を大幅に超えるのはなぜですか? 1つのケースでは、3つの可用性グループと合計10のデータベースで300以上のスレッドの使用を観察しました。SQL Server 2014 SP1。 私たちのリードは、セカンダリレプリカのバックアップ、プライマリレプリカの高アクティビティ、セカンダリレプリカのレポートです。 AGはVMwareのデータセンターにあります。合計16のスケジューラー、通常のワーカースレッドは200未満の範囲です。サーバーのmax_dopは2です。 3 AG、10 DB、各4レプリカ-プライマリ、2読み取り専用、1読み取り不可。 セカンダリ1つは同期、2つは非同期 大規模なマルチホストクラスター上の物理32コア上の16 vcore。 過剰プロビジョニングはありません。 他の小さいVM 4-8コアは同じ場所に配置されますが、CPUを圧迫しません ワーカースレッドのスパイクが原因でサービス拒否が発生したことが確認されました。AGへのワーカースレッドの帰属は、それらのワーカースレッドのみが制限を超えることができるため、私たちの仮定です。 以下のSQL Server Premier Field Engineerブログからのリンクは、コンテキストで読んでも完全な答えにはなりません。 SQL Server 2012 AlwaysOn可用性グループのワーカースレッド消費の監視 実際のワーカースレッドは、sp_configureの「最大ワーカースレッド」値を超えていますか?

3
複数のデータベースを同じ時点にバックアップする
通常、バックアップを開始するときは、変更のコミットを許可しないか、データベースにアクセスできなくなります。データベースがシングルユーザーモードになることを意味しますが、バックアップを開始し、データベースを解放して使用します。また、バックアップを開始したら、進行中の変更をバックアップファイルに書き込まないようにします。Microsoft SQL Server 2012でこれを実現する方法を知りたいです。 さて、まず私の問題を説明させてください。現在、バックアップが完了するまで、データベースをシングルユーザーモードに設定しています。このモードは、バックアップの進行中にデータの変更を回避するという私の目的に役立ちます。しかし、私のアプリケーションは複数のデータベースに関連付けられています(各データベースは相互にリンクされており、毎月作成し続けるvar dbsがあります)。そのため、これらすべてのデータベースのバックアップは退屈なプロセスになり、さらに重要なのは、バックアップの進行中は、ユーザーをシステムから除外する必要があることです。 そこで、以下の要件を満たすバックアップメカニズムを探しています。 一度にすべてのデータベースのバックアップを開始し、使用できるようにデータベースを解放します。 データベースは相互にリンクされているので、バックアップファイルでデータの一貫性を維持したいと考えています。したがって、このデータ整合性の要件のため、進行中の変更をバックアップファイルにコミットしたくありません。 必要なのは、ある時点でのすべてのデータベースのバックアップです。

4
特定のSQL ServerにアクセスするすべてのIPまたはユーザーを検索する
SQLサーバーを見つけたが、どのアプリケーションがそれに接続しているかがわからないとします。多分私は1つのアプリケーションを見つけますが、それがそれを使用している唯一のアプリケーションかどうかはわかりません。 すべての異なる接続を見つける良い方法はありますか?

1
PowerShellでSQLCMDを介してLocalDBに接続する
SQLCMDユーティリティを使用して、PowerShellを介してコンピューター上の "localdb \ MSSQLLocalDB"サーバーにアクセスしようとしています。PowerShell v5、.NET v5.0を使用していますが、サーバー名は(localdb)\MSSQLLocalDBMicrosoft SQL Server Management Studio 2014で接続するときに使用されます。 PS C:\> sqlcmd -S localdb\MSSQLLocalDBそしてPS C:\> sqlcmd -S .\localdb\MSSQLLocalDB、このエラーが発生し: Sqlcmd:エラー:SQL ServerのMicrosoft ODBCドライバー11:SQL Serverネットワークインターフェイス:指定されたサーバー/インスタンスの検索エラー[xFFFFFFFF]。 Management Studioでサーバー名を照会し、上記のコマンドでSELECT @@ServerNameそれを使用した-Sところ、同じエラーが発生しました。 PS C:\> sqlcmd -S localdb このエラーが発生します: Sqlcmd:エラー:SQL Server用Microsoft ODBCドライバー11:名前付きパイププロバイダー:SQL Serverへの接続を開けませんでした[53] その他の注意事項:この接続文字列を使用して、サーバーに接続し、C#コンソールアプリでtestdb01という名前のデータベースを操作できSystem.Data.SqlClientます。 "Data Source=(localdb)\\mssqllocaldb;Initial Catalog=testdb01;Integrated Security=SSPI;"


1
一時テーブルにデータをロードするときに最小限のログを取得します
データロードパフォーマンスガイドを読んでも、最小限のログを取得するためにクラスター化インデックスで定義された空の一時テーブルにTABLOCKテーブルヒントを追加する必要があるかどうかはまだわかりません。 一時テーブルは、SIMPLEリカバリモードで動作するTempDBで作成されるのは明らかなので、最小限のロギングの完璧な候補だと思いましたが、確認するための通路が見つかりません。 一時テーブルは最小限のロギングの候補です。そうであれば、永続テーブルに推奨されるTABLOCKヒントを追加する価値はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.