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

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

6
毎月第3金曜日を決定する
SQL Serverの「1.1.1996-30.8.2014」の日付範囲の「各月の第3金曜日」である日付を決定する必要があります。 私はの組み合わせを使用する必要があり期待DENSE_RANK()してPARTITION BY()セット「ランク= 3」に。しかし、私はSQLが初めてであり、正しいコードを見つけることができません。

4
テーブルフィールドを削除した後のディスク領域の要求
私はSQL 2008 r2を実​​行していますが、非常にアクティブで使用されているテーブルにntextフィールドを追加するまで、データベースは過去3年間正常かつ高速に動作していました。このテーブルのサイズが非常に大きくなっているため、サーバースペースを使い始めています。 何年も高速に動作していたため、dbのインデックス付けを失いたくはありませんし、断片化の支出も受けたくないのです。 そのフィールドとそのすべての値を削除することにしました: ntextフィールドとそのすべての値を削除し、インデックスを削除せず、縮小せずに、dbのパフォーマンスを失うことなくスペースを解放する方法はありますか? 過去5か月のサイズ拡張を示すために、dbサイズクエリ出力を添付します。

9
WHERE句の代替[クローズ]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、上のトピックデータベース管理者スタックExchange用。 4年前に閉鎖されました。 SELECT使用せずに、列に特定のデータを持つ行のみを作成する方法はありWHEREますか? たとえば、これがあった場合: SELECT * FROM Users WHERE town = 'Townsville' 文にWHERE句を実装する方法はありSELECTますか? 何かのようなもの SELECT *, town('Townsville') FROM Users 奇妙な質問ですが、仲間から尋ねられた質問です
16 sql-server 

3
サブクエリを使用した大きなテーブルでの更新が遅い
でSourceTable> 15MMレコードとなるBad_Phrase> 3Kの記録を持つ、次のクエリは、SQL Server 2005のSP4上で実行するために、ほぼ10時間かかります。 UPDATE [SourceTable] SET Bad_Count= ( SELECT COUNT(*) FROM Bad_Phrase WHERE [SourceTable].Name like '%'+Bad_Phrase.PHRASE+'%' ) 英語では、このクエリは、フィールドのサブているBad_Phraseに記載されている明確なフレーズの数カウントしているName中でSourceTable、その後のフィールドにその結果を置くことをBad_Count。 このクエリを非常に高速に実行する方法についての提案をお願いします。

6
SQL Server 2008 R2のインストール中に「指定されたアカウントは既に存在します」エラーを解決する方法
最近、Visual Studio 2012とSQL Server 2008 R2を新しい開発マシンにインストールするときに問題が発生しました。私のインストールシーケンスはVisual Studio 2012で、SQL Server 2008 R2をインストールしました。 SQL Serverのインストール中にエラーが発生しました: 指定されたアカウントは既に存在します。 私はこの問題を解決するために一日を費やしました。

2
IDENTITY列の予期しないギャップ
1から始まり1ずつ増加する一意の注文番号を生成しようとしています。このスクリプトを使用してPONumberテーブルを作成しています。 CREATE TABLE [dbo].[PONumbers] ( [PONumberPK] [int] IDENTITY(1,1) NOT NULL, [NewPONo] [bit] NOT NULL, [DateInserted] [datetime] NOT NULL DEFAULT GETDATE(), CONSTRAINT [PONumbersPK] PRIMARY KEY CLUSTERED ([PONumberPK] ASC) ); このスクリプトを使用して作成されたストアドプロシージャ: CREATE PROCEDURE [dbo].[GetPONumber] AS BEGIN SET NOCOUNT ON; INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1); SELECT SCOPE_IDENTITY() AS PONumber; END 作成時に、これは正常に機能します。ストアドプロシージャが実行されると、目的の数から始まり、1ずつ増加します。 奇妙なことは、コンピューターをシャットダウンまたは休止状態にした場合、次にプロシージャを実行すると、シーケンスがほぼ1000ずつ進んだことです。 以下の結果を参照してください。 数字が8から1002にジャンプしたことがわかります。 …

3
各ノードにランダムな数の子がある複数レベルの階層を作成する
階層を含むテストデータを作成する必要があります。私はそれを簡単にし、いくつかのことをすることができましたが、それCROSS JOINは私に完全に均一な/変化のない構造を与えるでしょう。それは鈍いように見えるだけでなく、テストデータの変動がないために、他の方法では見つからない問題を隠してしまうことがあります。だから、私はこれらのルールに従う不均一な階層を生成したいと思っています: 深さ3レベル レベル1はランダムに5〜20ノードです レベル2は1〜10ノードで、レベル1の各ノードごとにランダムです レベル3は1〜5ノードで、レベル2の各ノードごとにランダムです すべてのブランチは3レベルの深さになります。この時点で深さの均一性は問題ありません。 任意のレベルで子ノードの名前が重複する可能性があります(つまり、子ノードの名前は、同じレベルのすべてのノードで一意である必要はありません)。 ここで「ランダム」という用語は、一意にランダムではなく、疑似ランダムであると定義されています。「ランダム」という用語は「複製を生成しない特定のセットのランダムな順序」を意味するためによく使用されるため、これについて言及する必要があります。ランダム=ランダムを受け入れ、レベル1の各ノードあたりの子の数が4、7、および8のみである場合、レベル1の20のノードでさえ、それらのノードごとに1-10の子の潜在的な広がりがある場合、それは問題ありません、なぜならそれがランダムであるからです。 これは入れ子にすると非常に簡単にできますが WHILEループを使用してますが、設定ベースのアプローチを見つけることが優先ます。一般的に、テストデータの生成にはプロダクションコードに必要な効率性の要件はありませんが、セットベースのアプローチの撮影はより教育的であり、問​​題に対するセットベースのアプローチを見つけるのに役立つでしょう。したがって、WHILEループは除外されませんが、セットベースのアプローチが不可能な場合にのみ使用できます。 Set-based =理想的には、CTE、APPLYなどに関係なく、単一のクエリです。したがって、既存またはインラインの数値テーブルを使用するのが適切です。WHILE / CURSOR /手続き型アプローチを使用しても機能しません。操作がすべてセットベースでループがない限り、データの一部を一時テーブルまたはテーブル変数にステージングすると思います。ただし、そうは言っても、複数クエリアプローチの方が実際に優れていることが示されない限り、単一クエリアプローチの方が複数のクエリよりも好まれます。「より良い」を構成するものは通常主観的であることに注意してください;-)。また、前の文での「通常」の使用も主観的であることに留意してください。 SQL Serverのすべてのバージョンとエディション(2005年以降、私は推測します)で対応します。 純粋なT-SQLのみ:その愚かなSQLCLRのものはありません!! 少なくともデータの生成に関しては。ディレクトリとファイルの作成は、SQLCLRを使用して行われます。しかし、ここでは、作成するものの価値を生成することに焦点を当てています。 T-SQL Multi-statement TVFは、外部ではセットの手続き型アプローチをマスクしているにもかかわらず、セットベースではなく手続き型と見なされます。それが絶対に適切な場合があります。これは当時のものではありません。それらと同じ線に沿って、T-SQLスカラー関数も手続き型であるという理由だけでなく、クエリオプティマイザーが値をキャッシュして、出力が期待どおりにならないように繰り返すこともあります。 T-SQLインラインTVF(別名iTVF)は、セットベースであるため、okey-dokey [ CROSS | OUTER ] APPLYであり、上記のok として説明したを使用するのと実質的に同じです。 クエリを繰り返し実行すると、前回の実行とほとんど異なる結果が生成されます。 明確化の更新1:最終結果セットは、レベル1で始まるフルパスを持つ、レベル3の個別のノードごとに1つの行を持つように表現する必要があります。これは、単一のLevel3ノードのみを含む単一のLevel2ノードしかない場合を除いて、Level1とLevel2の値が必ず1つ以上の行にわたって繰り返されることを意味します。 明確化の更新2:番号だけでなく、名前またはラベルを持つ各ノードに非常に強い優先順位があります。これにより、結果として得られるテストデータがより有意義で現実的になります。 この追加情報が重要かどうかはわかりませんが、何らかのコンテキストが役立つ場合に備えて、テストデータはこの質問に対する私の回答に関連しています。 XMLファイルをSQL Server 2012にインポートする この時点では関係ありませんが、この階層を生成する最終目標は、ディレクトリ構造を作成して、再帰的なファイルシステムメソッドをテストすることです。レベル1と2はディレクトリになり、レベル3はファイル名になります。私は周りを検索しました(ここでもGoogle経由でも)で、ランダムな階層を生成するための参照が1つだけ見つかりました。 Linux:ランダムなディレクトリ/ファイル階層を作成する (StackOverflowでの)その質問は、テスト用のディレクトリ構造を作成しようとするため、実際には望ましい結果の点で非常に近いです。しかし、その質問(および回答)はLinux / Unixシェルスクリプトに焦点を当てており、私たちが住んでいるセットベースの世界ではありません。 これで、ランダムデータを生成する方法がわかりました。また、バリエーションを表示できるように、ファイルのコンテンツを作成するために既にそうしています。ここで注意が必要なのは、特定のフィールドではなく、各セット内の要素の数がランダムであることです。また、各ノード内の要素の数は、同じレベルの他のノードからランダムである必要があります。 階層の例 Level 1 Level 3 |---- …


2
結合述語で変数を参照すると、ネストされたループが強制されるのはなぜですか?
最近この問題に遭遇しましたが、オンラインで議論することができませんでした。 以下のクエリ DECLARE @S VARCHAR(1) = ''; WITH T AS (SELECT name + @S AS name2, * FROM master..spt_values) SELECT * FROM T T1 INNER JOIN T T2 ON T1.name2 = T2.name2; ネストされたループ計画を常に取得します 問題INNER HASH JOINまたはINNER MERGE JOINヒントで問題を強制しようとすると、次のエラーが生成されます。 このクエリで定義されたヒントのため、クエリプロセッサはクエリプランを作成できませんでした。ヒントを指定せずに、SET FORCEPLANを使用せずに、クエリを再送信します。 ハッシュ結合またはマージ結合の使用を許可する回避策を見つけました-変数を集約にラップします。生成された計画は大幅に低コストです(19.2025対0.261987) DECLARE @S2 VARCHAR(1) = ''; WITH T AS (SELECT …

2
データベースのデフォルトの照合順序を変更したときのLatin1_General_BINのパフォーマンスへの影響
データベース照合をに設定して、Latin1_General_BIN文字列比較で大文字と小文字を区別します。これはパフォーマンスに影響しますか?データベースのDMLまたはDDL操作に影響はありますか?データベースは既にテーブルとともに存在しています。

2
SQL Server拡張イベントデータの視覚化
最近、SQL Serverの拡張イベントを使用して、さまざまなクエリのベンチマークと最適化に役立てています。これまでのところ、イベントデータを表示するには、SSMSの「ライブデータの監視」機能を使用していました。 私が抱えている問題は、ライブイベント機能が内部バッファーを使用しているように見えることです。つまり、クエリを数回実行して、情報をウィンドウに表示する必要がある場合があります。したがって、2つの部分からなる質問があります。 ライブフィードにイベントを表示する際のこの遅延を回避する方法はありますか?(私はローカルデータベースでこれを行っているので、パフォーマンスは問題になりません) ライブフィードは、拡張イベントデータを視覚化する最良の方法ですか?SSMSには、ユースケースに適した別のツールがありますか? 更新 要求に応じて、セッションは次のとおりです。 CREATE EVENT SESSION [Simple Query Benchmarking] ON SERVER ADD EVENT sqlserver.sql_batch_completed(SET collect_batch_text=(1) ACTION(sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.sql_text) WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0)) AND [package0].[greater_than_uint64]([duration],(1000)))) ADD TARGET package0.ring_buffer WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=1 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF) GO

2
乱数と結合タイプを使用した予期しない結果
4つの乱数(1から4)を取得し、結合して一致するdatabase_id番号を取得する単純なスクリプトがあります。LEFT JOINを使用してスクリプトを実行すると、毎回4行が返されます(予想される結果)。ただし、INNER JOINを使用して実行すると、行の数が変化します(2行、8行の場合もあります)。 論理的には、sys.databasesにdatabase_ids 1〜4の行が存在することがわかっているため、違いはありません。また、(結合するのではなく)4つの行を持つ乱数テーブルから選択しているため、4行以上が返されることはありません。 これはSQL Server 2012と2014の両方で発生します。INNERJOINがさまざまな行数を返す原因は何ですか? /* Works as expected -- always four rows */ SELECT rando.RandomNumber, d.database_id FROM (SELECT 1 + ABS(CHECKSUM(NEWID())) % (4) AS RandomNumber FROM sys.databases WHERE database_id <= 4) AS rando LEFT JOIN sys.databases d ON rando.RandomNumber = d.database_id; /* Returns a varying number …
16 sql-server  t-sql 

3
ネットワーク遅延が増加すると、MS SQL Serverでテーブルロックが発生しますか?
高遅延ネットワークを介してSQL Serverデータベースを1回呼び出している場合、その遅延のためにテーブルロックが発生しますか?たとえば、テーブルAにいくつかのレコードを照会すると、SQL Serverはそのデータを低速ネットワーク経由で返す必要があります。サーバーがネットワーク経由で応答を送信するか、SQL Serverが送信前にロックを解除する間にテーブルAに読み取りロックが発生します応答? また、回答のサイズに基づいて答えは異なりますか?数KBと数百MBを返すだけでよい場合、違いはありますか? 明示的にトランザクションを作成し、クエリを実行し、トランザクションを閉じると、トランザクションの期間がレイテンシと相関するため、明らかにテーブルがロックされます。

5
データベースエンジンの回復ハンドルが失敗するのを待ちます。SQL Serverエラーログで潜在的な原因を確認してください[終了]
閉じた。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 2年前に閉店しました。 SQL2008R2-SQL2012-sql2014をインストールしようとしました 2014-07-17 16:31:16.00 spid14s Error: 17190, Severity: 16, State: 1. 2014-07-17 16:31:16.00 spid14s Initializing the FallBack certificate failed with error code: 1, state: 20, error number: 0. 2014-07-17 16:31:16.00 spid14s Unable to initialize SSL encryption because a valid certificate could not be found, and it is not …

1
ASYNC_NETWORK_IO待機タイプは心配することはありますか?
実行に長い時間がかかるストアドプロシージャのリストを見ると、待機時間が最も多いことが際立っています。ただし、その待機時間のほとんど(81%)はASYNC_NETWORK_IOであり、その理由はわかっています。ストアドプロシージャは約400 MBの情報を転送します。 ドキュメントでは、ASYNC_NETWORK_IOの原因は、クライアントがデータのフラッドに追いつくことができないことであり、それはおそらく真実であると述べています。クライアントがADO.NET経由でストアドプロシージャを呼び出してからデータセットを処理するだけなので、クライアントを維持する方法がわかりません。 したがって、この情報が与えられた場合、この手順のASYNC_NETWORK_IO待機タイプについて心配する必要がありますか?実際にサーバーのパフォーマンスに影響しますか? 追加情報: SQL Server 2005のサービスパック2を使用しています。 クライアントアプリは、SQL Serverと同じボックス上にあります(私は知っています...知っていますが、それについては何もできません)。

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