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

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

6
読み取り専用アプリケーションインテントのSSMS登録済みサーバー
現在、AlwaysOnを使用したSQL Server 2014 POCテストに取り組んでおり、ユーザーの1人が、ローカルサーバーグループに登録されているサーバーを使用して、ReadOnly Intent でSSMSの構成を保存することについて質問しました。これにより、ReadOnlyレプリカにアクセスする必要があるたびにエイリアス名を入力する必要がなくなります。 残念ながら、登録されたサーバー内には、通常のオブジェクトエクスプローラーとは異なり、ApplicationIntentオプションを追加するオプションはありません。 RegSrvr.xmlの接続文字列を変更することについて、マイクロソフトからこの記事を見つけました。 https://connect.microsoft.com/SQLServer/feedback/details/786323/ssms-sql-server-management-studio-2012-missing-connection-properties-for-availability-groups 私は彼らの提案を試してみましたが、登録済みサーバーのローカルサーバー経由で接続すると、正しいレプリカノードに接続しませんでした。 読み取り専用の接続ウィンドウのオプション>接続パラメータを使用した場合のオプションは、オブジェクトエクスプローラから罰金を動作します。ただし、接続に加えられた変更は保存されません。 SSMS でReadOnly Intentプロパティを使用して構成を保存するための代替ソリューションを知っている人はいますか?よろしくお願いします。

1
SQL Serverクエリの動作が、UPDATEとSELECTで異なるのはなぜですか?
フィールドでパーティション分割した後、レコードを連続番号に更新するSQL Serverクエリを作成しました。SELECTステートメントとして実行すると、すべてが見栄えがします。 DECLARE @RunDetailID INT = 448 DECLARE @JobDetailID INT SELECT @JobDetailID = [JobDetailID] FROM [RunDetails] WHERE [RunDetailID] = @RunDetailID SELECT [OrderedRecords].[NewSeq9], RIGHT([OrderedRecords].[NewSeq9], 4) FROM ( SELECT [Records].*, [Records].[SortField] + RIGHT('0000' + CAST(ROW_NUMBER() OVER(PARTITION BY [Records].[SortField] ORDER BY [Records].[RunDetailID], [Records].[SortField], [Records].[PieceID]) AS VARCHAR), 4) NewSeq9 FROM ( SELECT [MRDFStorageID], [RunDetailID], …

1
SQL Serverはいつロックを取得しますか?
ここにあるSQL Serverの分離レベルのリストには、トランザクション内で取得された書き込みロックは、トランザクションが終了するまで保持されることが記載されています。ただし、これらのロックがいつ取得されるかについては触れられていません。 ロックはデフォルトでトランザクションの開始時に取得されますか、それとも必要なときに取得されますか?後者が当てはまる場合、Xのロックが保持される時間を最小限に抑えるために、大規模なトランザクションでは書き込み操作をできるだけ遅く実行する方が有利でしょうか。

1
左から2番目の特定の文字が出現した後に文字列を削除します
テーブル列にこのタイプの値があります 154646@8@486 45465@6464@654 等 2番目の@文字の後にすべてを削除するにはどうすればよいですか?表示する必要があります 154646@8 45465@6464 私はすべての@に対してのみ実行できますが、2番目には実行できません SELECT REPLACE(LEFT('45@Tra@lala', CHARINDEX('@','45@Tra@lala')-1),'_',' ') 45を返すが45 @ Traは返さない ありがとうございました :-)
10 sql-server 

1
複数の.mdfファイルを含むデータベース
オンラインで検索しましたが、探しているものが見つかりません。 問題/クエリは、私の知る限り、SQL Serverのデータベースには1つの.mdfファイルと、おそらくいくつかの.ndfファイルと1つの.logファイルが必要です。 1つのmdfファイルと複数のndfファイルを持つ多くのデータベースを見てきました。しかし最近、すべてのデータベースに複数のmdfファイルが存在するサーバー上のデータベースに遭遇しました。 一部のデータベースのバックアップを取り、それらを別のサーバーに移動し、プライマリファイルを.mdfとして、その他のすべてのファイルを.ndfとして復元しました。 今私の質問は: データベースに複数の.mdfファイルを作成することには、何か賢明なことはありますか? 複数の.mdfファイルがあることの欠点はありますか? そうだった SQL Server 2008 R2 64bit Enterprise Edition 正しい方向へのアドバイスやポインタは大歓迎です。ありがとうございました。

1
TSQL変数の方がTopの方が速いのはなぜですか?
皆さんおはよう、 サードパーティ製品のデータベースからデータを「取得」して、自社の自社アプリケーションで表示するために、ある程度複雑なSQLに取り組んでいます。 サブクエリ内のテーブルからトップレコードを取得するために選択に追加しました(それが理にかなっている場合) クエリは、100レコードの最終結果セットを返すのに3分近くかかりました。 SELECT TOP 1 ... 私が達成しようとしていたことの改善点をオンラインで見て、以下のように変数を使用するように選択を変更するよう提案されました DECLARE @topCount INT SET @topCount = 1 SELECT TOP (@topCount) ... これは、3分から1秒まで同じクエリを使用しました。 しかし、これがそうである理由を誰かが説明できますか?
10 sql-server  t-sql 

3
クラスタ化インデックスで再構築しますが、なぜデータサイズが縮小するのですか?
約15 GBのデータが含まれ、データサイズが5 GBに縮小されたテーブルのクラスター化インデックスで再構築を行った場合、これはどのように行われますか?どのような「データ」が削除されますか? データサイズは、DBCC sp_spaceusedの "data"列を意味します クラスタ化インデックスで再構築する前: name rows reserved data index_size unused LEDGERJOURNALTRANS 43583730 39169656 KB 15857960 KB 22916496 KB 395200 KB クラスタ化インデックスで再構築した後: name rows reserved data index_size unused LEDGERJOURNALTRANS 43583730 29076736 KB 5867048 KB 22880144 KB 329544 KB 再構築のためのTSQL: USE [DAX5TEST] GO ALTER INDEX [I_212RECID] ON [dbo].[LEDGERJOURNALTRANS] REBUILD …

2
セカンダリデータファイルを削除しています。DBCC SHRINKFILE:作業テーブルページであるため、ページを移動できませんでした
に対して作成したセカンダリデータファイル(.ndf)が多すぎますtempdb。余分なファイルを削除するには、ファイルを空にする必要があります(コンテンツは他のファイルに移動されます)。 DBCC SHRINKFILE('tempdbfile8', EMPTYFILE); 次にファイルを削除します。 ALTER DATABASE tempdb REMOVE FILE tempdbfile8; しかし、EMPTYFILEコマンドはエラーを返します: DBCC SHRINKFILE: Page 8:41920 could not be moved because it is a work table page. Msg 2555, Level 16, State 1, Line 2 Cannot move all contents of file "tempdbfile8" to other places to complete the emptyfile operation. …

2
Parallel Scalar UDFのサポートは妥当な機能リクエストですか?
スカラーUDFが全体的なシリアルプランを強制することはかなりよく文書化されています。 関数の並列実行 UDFを計算する必要があるパイプラインのポイントに入る行の数が多い場合、エンジンがそれらをプロセッサー間で単に分散できないのはなぜですか?UDF内に状態がない場合、順序は関係ありません。 UDFがブラックボックスであるため、カーソルを使用する必要があるという主張があります。反復間で一部の状態が維持されている場合、SP内でユーザーカーソルを並列化できませんが、それ以外の場合は並列化可能であるように見えます。 エンジンがUDF計算ステージだけでなく、全体の計画をシリアルにする理由を説明するための追加のポイント。 並列UDFのサポートは、要求するのに妥当な機能ですか?

5
INSERT_IDENTITYを使用して、selectに複数の関連テーブルに挿入します
シーンを設定してみましょう。私は、3つのテーブルを持っている(Table1、Table2およびDataTable)、私はに挿入するTable1と、Table2使用してDataTableソースとして。だから、内のすべての行のためにDataTable私の行をしたいTable1とTable2、そしてTable2挿入されている必要がありidから(PK)をTable1... 私がこれをするなら... INSERT INTO Table1 SELECT A, B, C FROM MyTable INSERT INTO Table2 SELECT IDENTITY_INSERT(), D, E, F FROM MyTable ID最後に挿入されたレコードのをに取得しTable1ます。 これを行う唯一の方法はCURSORor WHILEループですか?

2
外部キー制約違反の問題
私は3つの状況を特定しました。 登録のない学生。 登録はあるが成績がない学生。 登録と成績を持つ学生。 登録テーブルには、GPAを計算するトリガーがあります。学生に成績がある場合は、GPAテーブルにエントリを更新または挿入します。成績なし、GPAテーブルエントリなし。 登録のない生徒を削除できます(#1)。登録と成績(上記の#3)を持つ学生を削除できます。しかし、登録はあるが成績がない学生は削除できません(#2)。参照制約違反が発生します。 DELETEステートメントがREFERENCE制約「FK_dbo.GPA_dbo.Student_StudentID」と競合しました。データベース ""、テーブル "dbo.GPA"、列 'StudentID'で競合が発生しました。 登録がなく(GPAエントリもない)新しい生徒を削除できなかった場合、制約違反は理解できますが、その生徒を削除できます。登録がなく、成績もない(それでもGPAエントリがない)学生は削除できません。 トリガーにパッチを適用したので、次に進むことができます。これで、登録がある場合、トリガーは何があってもGPAテーブルに挿入します。しかし、私は根本的な問題を理解していません。説明をいただければ幸いです。 それが価値があるもののために: Visual Studio 2013 Professional。 IISエクスプレス(VS2013の内部)。 EntityFramework 6.1.1を使用するASP.NET Webアプリ。 MS SQL Server 2014 Enterprise。 GPA.Valueはnull可能です。 Enrollment.GradeIDはnull可能です。 これはデータベースのスニペットです: - 編集 - テーブルはすべてEntityFrameworkによって作成され、SQL Server Management Studioを使用して作成しました。 次に、制約付きのテーブル作成ステートメントを示します。 GPA テーブル: CREATE TABLE [dbo].[GPA]( [StudentID] [int] NOT NULL, [Value] [float] NULL, CONSTRAINT …

1
INSTEAD OF UPDATEトリガーを持つテーブルに対するUPDATEが、クラスター化インデックスの更新だけでなく、クラスター化インデックスの挿入も行うように見えるのはなぜですか?
非常に単純な例から始めましょう。2つのテーブルが同じスキーマで、PKでクラスター化されていますが、そのうちの1つにINSTEAD OF UPDATEトリガーがあります。 CREATE TABLE Standard ( PK UNIQUEIDENTIFIER PRIMARY KEY CLUSTERED, V INT NOT NULL ) GO CREATE TABLE InsteadOf ( PK UNIQUEIDENTIFIER PRIMARY KEY CLUSTERED, V INT NOT NULL ) GO INSERT Standard (PK, V) VALUES ('1E58B555-B073-471E-B576-4B09C8E18976', 0) INSERT InsteadOf (PK, V) VALUES ('1E58B555-B073-471E-B576-4B09C8E18976', 0) GO CREATE TRIGGER …

1
tempdbへのハッシュ/ソートの流出の頻度はどのくらいですか?
私たちのエンタープライズアプリケーションは、データストレージにSQL Serverを使用し、主にOLTPシステムです。ただし、アプリケーションの重要なコンポーネントは、重要なOLAPワークロードを生成します。 tempdbへの書き込み待ち時間は約100msです。この傾向は、時間をかけて保持し、ALLOW_SNAPSHOT_ISOLATION投入されるオフ。私たちはこれに関して問題のトラブルシューティングを行っていますが、これまでに見つかった唯一の興味深いことは、tempdbへのハッシュとソートの流出が非常に多いことです。これはOLAPワークロードによるものだと思います。 質問 流出の頻度はどの程度ですか?どれか?1秒あたりの流出回数は?予備データによると、毎秒約2回のハッシュ流出と1分あたり25回のソート流出があります。 この流出の頻度が、tempdbの書き込み待ち時間が長い主な原因である可能性はありますか? その他の情報 コアの数ごとに推奨されているように、tempdbには複数のファイルを使用しています。tempdbファイルはRAID 1 + 0 SAN(高性能SSDを搭載)上にありますが、これはメインのDBデータおよびログファイルと同じデバイスです。tempdbファイルのサイズは、非常にまれに大きくなるほど大きくなっています。トレースフラグ1117または1118は使用していません。別の変数は、このセットアップが、すべて中程度から高い負荷を経験する多くの異なるデータベースで共有されていることです。 100ミリ秒の書き込みレイテンシは、MSDN、SQLスキル、その他のサイトで見つかったtempdb書き込みレイテンシの許容範囲よりもはるかに大きくなっています。ただし、他のデータベースの書き込みレイテンシは良好です(10ミリ秒未満)。他の統計に基づいて、tempdbを特に内部オブジェクトに対して頻繁に使用しているようです。したがって、アプリケーションが内部オブジェクトを非常に多く使用している理由を調べるために掘り下げています。 私たちのプラットフォームには、さまざまな形で現れる実際のパフォーマンスの問題があります。私たちはパフォーマンスカウンターを監視し、DMビューを確認し、アプリの動作を分析して、システムのリソース使用特性を掘り下げようとしています。流出はメモリ内ではなくディスク上で実行されるため、流出は劇的な悪影響をもたらすことがわかっているため、現時点では流出に焦点を当てています。また、流出の数は非常に多いようですが、人々が「高」と見なしていることについて何らかの情報を入手したいと考えていました。

1
トランザクション分離レベルのスナップショットと切り捨て?
スナップショット分離とTRUNCATEに関して、私が予期していなかったこの動作に誰かが光を当てることができることを願っています。 データベース:スナップショット分離を許可= True; コミットされた読み取りスナップショットがオン= False。 手順1(長時間実行される複雑なSELECTのテーブルfooのコンテンツを多数の結合で置き換えます): BEGIN TRAN; TRUNCATE TABLE foo; INSERT INTO foo SELECT...; COMMIT; 手順2(テーブルfooからの読み取り): SET TRANSACTION ISOLATION LEVEL SNAPSHOT; SELECT * FROM foo; Procedure2の実行中にProcedure1が実行されている場合、Procedure2は、Procedure1が終了するまで(sp_WhoIsActiveに応じて)LCK_M_SCH_S待機で待機します。そして、Procedure2が完了すると、次の例外が発生します。 このトランザクションの開始以降、ステートメントによってアクセスされたオブジェクトが別の同時トランザクションのDDLステートメントによって変更されたため、データベース 'DatabaseName'でスナップショット分離トランザクションが失敗しました。メタデータはバージョン管理されていないため、許可されません。メタデータへの同時更新は、スナップショット分離と混在している場合、不整合を引き起こす可能性があります。 ただし、Microsoftでは、スナップショット分離では許可されていないDDLステートメントとしてTRUNCATEをリストしていません。http://msdn.microsoft.com/en-us/library/bb933783.aspx 手順2がTRUNCATEの前にテーブルから最も最近コミットされたデータをすぐに返すか、または手順1によって保持されてから、テーブル。手伝ってくれますか?

1
テンポラルデータベース設計で一意のエントリを確保する正しい方法は何ですか?
テンポラルデータベースの設計に問題があります。店舗の任意の時間枠でアクティブレコードが1つだけであることを確認する方法を知る必要があります。私はこの答えを読みましたが、トリガーがどのように機能するかについて頭を抱えることはできません。特に、レコードの更新を防ぎ、代わりに新しいレコードを挿入する既存のトリガーをトリガーする方法。私の本当の問題は、終了日がnullの場合にストアが複数の有効日を持つことを防ぐ方法がわからないことです。(つまり、ストアの2つのアクティブなレコードを防止します) これは私が持っているものですが、有効日が異なる店舗の新しいレコードを挿入できます。 テーブル定義: /****** Object: Table [PCR].[Z_STORE_TEAM] Script Date: 05/09/2014 13:05:57 ******/ IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Z_STORE_TEAM]') AND type in (N'U')) DROP TABLE [Z_STORE_TEAM] GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Z_STORE_TEAM]') AND type in (N'U')) BEGIN CREATE TABLE [Z_STORE_TEAM]( [STORENUM] …

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