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

SQL Server 2012(メジャービルドバージョン11.00.xxxx)。sql-serverにもタグを付けてください。

2
null列は主キーの一部になりますか?
SQL Server 2012データベースを開発していますが、One-to-Zero-Or-Oneの関係について質問があります。 2つのテーブルがCodesありHelperCodesます。コードには、ゼロまたは1つのヘルパーコードを含めることができます。これは、これら2つのテーブルとそれらの関係を作成するSQLスクリプトです。 CREATE TABLE [dbo].[Code] ( [Id] NVARCHAR(20) NOT NULL, [Level] TINYINT NOT NULL, [CommissioningFlag] TINYINT NOT NULL, [SentToRanger] BIT NOT NULL DEFAULT 0, [LastChange] NVARCHAR(50) NOT NULL, [UserName] NVARCHAR(50) NOT NULL, [Source] NVARCHAR(50) NOT NULL, [Reason] NVARCHAR(200) NULL, [HelperCodeId] NVARCHAR(20) NULL, CONSTRAINT [PK_Code] PRIMARY KEY CLUSTERED ( …

2
シークできない永続化計算列のインデックス
という名前のテーブルがありAddress、そのテーブルには、という永続的な計算列がありHashkeyます。列は確定的ですが、正確ではありません。シークできない一意のインデックスがあります。このクエリを実行すると、主キーが返されます。 SELECT @ADDRESSID= ISNULL(AddressId,0) FROM dbo.[Address] WHERE HashKey = @HashKey 私はこの計画を取得します: インデックスを強制すると、さらに悪い計画が得られます。 インデックスとシークの両方を強制しようとすると、エラーが発生します。 このクエリで定義されたヒントのため、クエリプロセッサはクエリプランを作成できませんでした。ヒントを指定せずに、使用せずにクエリを再送信しますSET FORCEPLAN これは、正確ではないという理由だけですか?持続するかどうかは関係ないと思いましたか? これを非計算列にすることなく、このインデックスをシーク可能にする方法はありますか? これに関する情報へのリンクはありますか? 実際のテーブル作成を投稿することはできませんが、同じ問題があるテストテーブルを次に示します。 drop TABLE [dbo].[Test] CREATE TABLE [dbo].[Test] ( [test] [VARCHAR](100) NULL, [TestGeocode] [geography] NULL, [Hashkey] AS CAST( ( hashbytes ('SHA', ( RIGHT(REPLICATE(' ', (100)) + isnull([test], ''), ( 100 )) ) + …

4
SQL Serverデッドロックレポートのキーを値に変換するにはどうすればよいですか?
waitresource = "KEY:9:72057632651542528(543066506c7c)"に関連する競合があったことを示すデッドロックレポートがあり、これを見ることができます。 <keylock hobtid="72057632651542528" dbid="9" objectname="MyDatabase.MySchema.MyTable" indexname="MyPrimaryKeyIndex" id="locka8c6f4100" mode="X" associatedObjectId="72057632651542528"> <resource-list>内。キーの実際の値(id = 12345など)を検索できるようにしたい。その情報を取得するには、どのSQLステートメントを使用する必要がありますか?

2
varchar列のサイズを小さくすると、データベースファイルにどのような影響がありますか?
データベースにはVARCHAR(MAX)、a VARCHAR(500)(またはmaxよりもはるかに小さいもの)で十分な列を持つテーブルがいくつかあります。当然、これらをクリーンアップし、サイズをより合理的なレベルに下げたいと思います。これを行うための「方法」は理解しています:私の質問は、これらの列を変更すると、ディスク上のページとエクステントに何が影響するのでしょうか?(列を拡大すると何が起こるかについて多くの情報がありますが、列を縮小すると何が起こるかに関する情報を見つけるのが困難です。) 一部のテーブルは行数が非常に少ないため、変更のコストについては心配していませんが、一部は非常に大きく、潜在的に再編成されて多くのブロッキング/ダウンタイムが発生することを心配しています。実際には、メンテナンスウィンドウを見積もる方法が必要です。一般に、この場合のデータベースエンジンの動作をよりよく理解したいと思います。 前もって感謝します! 編集: 見ているテーブルは20個ありますが、行カウントが1,000を超えるテーブルは半分しかありません。最大のものにはほぼ100万行あります。最悪の違反者は、350,000行と4 VARCHAR(MAX)列からなるテーブルで、このVARCHAR(500)レベルまで縮小できます。

3
特定のインスタンスのデータベースによるCPU使用率を取得する方法は?
データベースごとのCPU使用率を検出する次のクエリを見つけましたが、異なる結果が表示されています。 WITH DB_CPU_Stats AS ( SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms] FROM sys.dm_exec_query_stats AS qs CROSS APPLY ( SELECT CONVERT(int, value) AS [DatabaseID] FROM sys.dm_exec_plan_attributes(qs.plan_handle) WHERE attribute = N'dbid') AS F_DB GROUP BY DatabaseID ) SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num], DatabaseName, [CPU_Time_Ms], CAST([CPU_Time_Ms] * 1.0 …

3
win-loss-tieデータからストリークカウントとストリークタイプを取得する
誰にとっても物事が簡単になる場合は、この質問に対してSQL Fiddleを作成しました。 ある種のファンタジースポーツデータベースがあり、私が理解しようとしているのは、「現在のストリーク」データ(チームが最後の2つのマッチアップに勝った場合は「W2」、負けた場合は「L1」など)前回の対戦で勝利した後の最後の対戦-または、最新の対戦で同点だった場合は 'T1')。 基本的なスキーマは次のとおりです。 CREATE TABLE FantasyTeams ( team_id BIGINT NOT NULL ) CREATE TABLE FantasyMatches( match_id BIGINT NOT NULL, home_fantasy_team_id BIGINT NOT NULL, away_fantasy_team_id BIGINT NOT NULL, fantasy_season_id BIGINT NOT NULL, fantasy_league_id BIGINT NOT NULL, fantasy_week_id BIGINT NOT NULL, winning_team_id BIGINT NULL ) 列の値はNULL、winning_team_idその一致の同点を示します。 以下に、6チームと3週間分の対戦のサンプルデータを含むサンプルDMLステートメントを示します。 INSERT INTO FantasyTeams …

2
SQL Server 2012で読み取り専用サーバーロールを作成する方法
新しいサーバーの役割を作成するときに「データベースの表示」アクセス許可を付与していますが、このアクセス許可はユーザーがシステムデータベースを表示することのみを許可することに気付きました。 読み取り専用で、任意のデータベースを読み取ることができるサーバーロールを作成しようとしています。 ユーザーデータベースを読み取るユーザー定義サーバーロールを作成する方法はありますか?または、ユーザーごとのユーザーマッピングを通じてこれを行う必要がありますか?

4
メンテナンスプランジョブでローカルサーバー接続を変更または更新する方法
2日前に、クライアントが開発サーバー名の1つを変更しました サーバーの名前が変更された後、サーバー名が一致しないため、すべてのメンテナンスジョブおよびその他のジョブが失敗します。 私たちは、使用しているSQL Server 2012のバージョンとサーバー2008 OSを だから今日の朝、私はSQL Server 2012の名前を名前を更新して名前を変更し、テーブル、手順を更新しました メンテナンスジョブでローカルサーバー接続を更新しようとしましたが、編集できません。次に、新しいサーバー接続を追加しましたが、ジョブを実行中にエラーが発生することはありません。 ジョブプロパティオプションのターゲットページで試した後、ターゲットサーバーのみが選択され、複数のターゲットサーバーが無効になっています。 以下のエラー ユーザーとして実行:NT Service \ SQLSERVERAGENT。64ビット版Microsoft(R)SQL Server Execute Package Utilityバージョン11.0.2100.60 Copyright(C)Microsoft Corporation。全著作権所有。 開始:12:01:28 AMエラー:2013-12-16 00:01:43.98コード:0xC00291ECソース:{410F7661-F71A-4B68-9584-BA422AB00F02} SQLタスクの実行の 説明:接続「ローカルサーバー接続」の取得に失敗しました。接続が正しく構成されていないか、この接続に対する適切な権限がない可能性があります。終了エラー エラー:2013-12-16 00:02:00.00 コード:0xC0024104 ソース:Territory_Update 説明:タスクのExecuteメソッドがエラーコード0x80131904を返しました(SQL Serverへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできませんでした。インスタンス名が正しいことと、 SQL Serverは、リモート接続を許可するように構成されています(プロバイダー:名前付きパイププロバイダー、エラー:40-SQL Serverへの接続を開けませんでした)。Executeメソッドは成功し、「out」パラメーターを使用して結果を示す必要があります。終了エラー エラー:2013-12-16 00:02:15.00 コード:0xC0024104 ソース:{4E2AF328-0B8D-4905-83BE-839FDDEFC09C} 説明:タスクのExecuteメソッドがエラーコード0x80131904を返しました(SQL Serverへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできませんでした。インスタンス名が正しいことと、 SQL Serverは、リモート接続を許可するように構成されています(プロバイダー:名前付きパイププロバイダー、エラー:40-SQL Serverへの接続を開けませんでした)。Executeメソッドは成功し、「out」パラメーターを使用して結果を示す必要があります。 終了エラーDTExec:パッケージ実行はDTSER_FAILURE(1)を返しました。 開始:12:01:28 AM 終了:12:02:15 AM …

3
SQL ServerがすべてのCPUコア/スレッドを使用していない
SQL Serverのハードウェアをアップグレードした後、Windowsタスクマネージャーで、SQLインスタンスが使用可能なスレッドの半分しか使用していないことに気付きました。 。 サーバーには次のハードウェアとソフトウェアがあります。 Windows 2008 R2 Enterprise 64ビットSP1 Intel Xeon E7-4870-4プロセッサー(40コア、80スレッド) Microsoft SQL Server 2012 Enterprise Edition(64ビット) 実行select cpu_count from sys.dm_os_sys_infoすると40が返されます。 OSは80スレッドすべてを認識します。 サーバーの処理能力の半分しか使用されていないのはなぜですか? 2台のサーバーに同じハードウェアとソフトウェアがあり、どちらも同じ動作を示します。

3
CTE階層の最適化
以下を更新 アカウントの階層を表す一般的なアカウント/親アカウントアーキテクチャのアカウントのテーブルがあります(SQL Server 2012)。CTEを使用してVIEWを作成し、階層をハッシュしました。全体として、意図したとおりに美しく機能します。任意のレベルで階層を照会し、ブランチを簡単に確認できます。 階層の関数として返される必要があるビジネスロジックフィールドが1つあります。各アカウントレコードのフィールドは、ビジネスのサイズを記述します(CustomerCountと呼びます)。レポートする必要があるロジックは、ブランチ全体からCustomerCountをロールアップする必要があります。つまり、アカウントが与えられた場合、そのアカウントのcustomercount値と、階層に沿ったアカウントの下のすべてのブランチのすべての子を合計する必要があります。 acct4.acct3.acct2.acct1のように見えるCTE内に構築された階層フィールドを使用して、フィールドを正常に計算しました。私が直面している問題は、単純に高速化することです。この1つの計算フィールドがないと、クエリは約3秒で実行されます。計算フィールドに追加すると、4分のクエリになります。 これが正しい結果を返す、私が思いつくことができた最高のバージョンです。パフォーマンスをそれほど犠牲にすることなく、このAS A VIEWをどのように再構築できるかについてのアイデアを探しています。 私はこれが遅くなる理由を理解しています(where句で述語を計算する必要があります)が、それを構造化して同じ結果を得る別の方法を考えることはできません。 以下に、テーブルを構築し、CTEを私の環境で動作するように正確に実行するためのサンプルコードを示します。 Use Tempdb go CREATE TABLE dbo.Account ( Acctid varchar(1) NOT NULL , Name varchar(30) NULL , ParentId varchar(1) NULL , CustomerCount int NULL ); INSERT Account SELECT 'A','Best Bet',NULL,21 UNION ALL SELECT 'B','eStore','A',30 UNION ALL SELECT 'C','Big Bens','B',75 UNION …

6
2008より遅いSQL Server 2012
古いサーバー(Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2.5 GHzクアッドコア/ SASディスク)から大規模なWebサイトとデータベースを、より優れた新しいサーバー(Windows 2008 R2 / SQL Server 2012 SP1 / 64 GB RAM / 2 x 2.1 GHz 16コアプロセッサ/ SSDディスク)。 古いサーバーのデータベースファイルをデタッチし、新しいサーバーにコピーして添付しました。すべてがうまくいきました。 その後、互換性レベルを110に変更し、統計を更新し、インデックスを再構築しました。 残念ながら、新しいSQL 2012サーバーでは、ほとんどのSQLクエリが古いSQL 2008サーバーよりもはるかに遅い(2-3-4倍遅い)ことに気付きました。 たとえば、約70万件のレコードがあるテーブルでは、古いサーバーではインデックスのクエリに約100ミリ秒かかりました。新しいサーバーでは、同じクエリに約350ミリ秒かかります。 すべてのクエリで同じことが起こります。 ここで助けていただければ幸いです。チェック/検証する内容を教えてください。新しいSQL Serverを搭載した優れたサーバーではパフォーマンスが低下すると信じるのは非常に難しいためです。 詳細: メモリは最大に設定されています。 私はこのテーブルとインデックスを持っています: CREATE TABLE [dbo].[Answer_Details_23]( [ID] [int] IDENTITY(1,1) …

3
OFFSET…FETCHと古いスタイルのROW_NUMBERスキームとの間に実行計画の違いがあるのはなぜですか?
OFFSET ... FETCHSQL Server 2012で導入された新しいモデルは、シンプルで高速なページングを提供します。2つの形式が意味的に同一であり、非常に一般的であることを考慮すると、なぜまったく違いがあるのですか? オプティマイザーが両方を認識し、それらを(簡単に)最大限に最適化すると仮定します。 OFFSET ... FETCHこれは、コストの見積もりによると2倍速い非常に単純なケースです。 SELECT * INTO #objects FROM sys.objects SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY object_id) r FROM #objects ) x WHERE r >= 30 AND r < (30 + 10) ORDER BY object_id SELECT * FROM #objects ORDER BY …


3
SQL ServerでUNIQUEIDENTIFIERを安全に生成する
UNIQUEIDENTIFIERユーザーが特定のデータにアクセスするために使用できるアクセスキーとしてを使用する予定です。その意味で、キーはパスワードとして機能します。 INSERT...SELECTステートメントの一部として、このような識別子を複数生成する必要があります。アーキテクチャ上の理由から、この場合はサーバー側で識別子を生成します。 安全にランダムに生成するにはどうすればよいUNIQUEIDENTIFIERですか?NEWIDセキュリティプロパティがまったく保証されないため、これは十分にランダムではないことに注意してください。推測できないIDが必要なため、SQL ServerのSystem.Security.Cryptography.RandomNumberGeneratorに相当するものを探しています。に基づくものCHECKSUM、RANDまたはGETUTCDATE資格がないもの。

1
SQL Server 2012でdboスキーマの所有権を転送する方法
誤ってユーザーにdb_ownerスキーマの所有権を与えました(以下のUIのチェックボックスを使用)が、今はできません: 所有権を別のユーザーに譲渡する DBからユーザーを削除します(ただし、SQL Serverでログインを削除できます) 私が試したデータベースプリンシパルは、データベースのスキーマを所有しており、削除できません。 ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo そして、正常に完了している間、ユーザーにはまだ所有権があり、灰色で表示されているので、UIでも実行できないようです。 ソリューションを見つけました: Arronの答えに加えて、間違ったDB(facepalm!)で上記のコマンドを実行することに気付きました。DBが修正されると、上記のSQLと以下の回答の両方が機能しました。

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