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

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

4
オブジェクト名の引用符を外すためのMS-SQLの(非表示の)組み込み関数はありますか?
オブジェクト名(識別子)を一部のデータベース、たとえば一部のパラメーターテーブルに保存することがあります。'='または 'LIKE'比較演算子を使用してこれらのテーブルからレコードを選択するため、これらの名前を常に角かっこ付きまたは角括弧なしで保存するように注意する必要があります。 IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = '[TABLE_NAME]'; または IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = 'TABLE_NAME'; ただし、MS-SQLには、OBJECT_ID()関数など、角括弧の有無にかかわらずオブジェクト名を使用できるいくつかの関数があります。私はdbfiddle.ukに最小限の例を設定しました。 CREATE TABLE TEST ( ID INT IDENTITY(1,1) PRIMARY KEY, OBJECT sysname NOT NULL ); GO INSERT INTO TEST VALUES ('[obj1]'),('obj2'),('obj3'),('[obj4]'); GO これで、OBJECT_ID()を使用して、テーブルTESTが次のように存在するかどうかを確認できます。 IF OBJECT_ID('TEST') IS NOT …
12 sql-server  t-sql 

1
クエリストアの強制計画機能が機能しない
クエリストアフォースプラン機能がプランを適用していないようです。 クエリストアを知っています-強制は常に強制を意味するわけではありません。ただし、私の計画はさほど変わらない場合がありますが、クエリオプティマイザーは引き続き不適切なインデックスやループの選択などを選択する可能性があります。 基本的に:それは私の強制的な計画の選択を尊重しません。私は多くの計画を強制しましたが、それはうまくいきません。 私が見たとき、0の失敗数または理由がありますsys.query_store_plan force_failure_count。 拡張イベントquery_store_plan_forcing_failedは何も生成しません。0イベント。 たとえば、20.09に強制された計画。たまたま強制計画を使用したコンパイルは1つだけです。 計画は大きく異なります。1つはINDEX 1でハッシュ一致結合を使用し、もう1つはINDEX 2でループ結合を使用します。 バージョン:Microsoft SQL Server 2016(SP1-GDR)(KB3210089)-13.0.4202.2(X64) ここで何が欠けていますか?


1
SSMSオプション「追加の実行オプションなしでストアドプロシージャのショートカットを実行する」とは何ですか?
これは冗長なオプションです。ドキュメントはなく、ウェブ検索も役に立ちません。クエリを実行しているとき、チェックされているオプションとチェックされていないオプションの違いに気づきません。この設定は何を制御しますか?

2
管理スタジオでスタックしたタスク、それらをどのように処理しますか?
Management Studioで[データベースをオフラインにする]をクリックした後、このメッセージはハングしたままで、閉じるをクリックしても閉じません。 管理スタジオでこれらのようなスタックした仕事に対処する良い方法は何ですか?あなたは活動モニターを介してそれらを殺すことができますか?このジョブの通過を停止しているプロセスを探して終了する必要がありますか?
12 sql-server  ssms 

2
ストアドプロシージャでのトランザクション
単一のトランザクションでUPDATEとINSERTを実行する必要があります。そのコードはそれ自体で問題なく機能しますが、簡単に呼び出して必要なパラメーターを渡すことができるようにしたいと思います。このトランザクションをストアドプロシージャにネストしようとすると、多くの構文エラーが発生します。 次のコードをカプセル化して簡単に呼び出せるようにするにはどうすればよいですか? BEGIN TRANSACTION AssignUserToTicket GO DECLARE @updateAuthor varchar(100) DECLARE @assignedUser varchar(100) DECLARE @ticketID bigint SET @updateAuthor = 'user1' SET @assignedUser = 'user2' SET @ticketID = 123456 UPDATE tblTicket SET ticketAssignedUserSamAccountName = @assignedUser WHERE (ticketID = @ticketID); INSERT INTO [dbo].[tblTicketUpdate] ([ticketID] ,[updateDetail] ,[updateDateTime] ,[userSamAccountName] ,[activity]) VALUES (@ticketID, 'Assigned ticket to …

3
可用性グループデータベースが同期なし/回復保留モードでスタックしている
SQL Server 2014 SP1(12.0.4422.0)インスタンスのストレージをアップグレードしているときに、SQL Serverの再起動後に2つのデータベースがセカンダリで起動しないという問題が発生しました。新しい(大きい)SSDを取り付け、データファイルを新しいボリュームにコピーしている間、サーバーは数時間オフラインでした。SQL Serverを再起動すると、2つを除くすべてのデータベースが再び同期を開始しました。他の2つは、SSMS で同期なし/回復保留中と表示されました。 以前に同様の同期しない/回復中の問題があったため、可用性グループ->可用性データベースセクションでステータスを確認しましたが、赤いXが表示されていました。 データ移動を一時停止しようとすると、エラーメッセージが生成されました。 可用性グループ「SENetwork_AG」の可用性レプリカ「ny-sql03」にあるデータベース「StackExchange.Bycycles.Meta」でのデータ移動の一時停止に失敗しました。(Microsoft.SqlServer.Smo) 追加情報:Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。(Microsoft.SqlServer.ConnectionInfo) ファイル「StackExchange.Bycycles.Meta」にアクセスできません。ファイルにアクセスできないか、メモリまたはディスク領域が不足しています。詳細については、SQL Serverエラーログを参照してください。(Microsoft SQL Server、エラー:945) チェックしたところ、ファイルは存在し、権限の問題はありませんでした。また、管理下のSSMSでSQL Serverログを確認しましたが、保留中の回復や2つのデータベースの問題については何も表示されませんでした。 ヘルプを検索したところ、データベースを復元する必要があると述べた2つの異なる記事が見つかりました。 データベースがリカバリ保留状態でスタックしているときに、セカンダリでデータレプリケーションを再開する方法はありますか?

3
SQL Server 2014ではクエリが100倍遅くなり、行カウントスプール行が原因を推定していますか?
SQL Server 2012では800ミリ秒で実行され、SQL Server 2014では約170秒かかるクエリがあります。これを、Row Count Spool演算子のカーディナリティーの見積もりが悪いものに絞り込んだと思います。スプールオペレーターについて少し読んだことがありますが(例:こことここ)、まだいくつかのことを理解できません。 このクエリにRow Count Spool演算子が必要なのはなぜですか?正確さのために必要だとは思わないので、具体的にどのような最適化を提供しようとしているのですか? SQL ServerがRow Count Spool演算子への結合がすべての行を削除すると推定するのはなぜですか? これはSQL Server 2014のバグですか?もしそうなら、私はConnectにファイルします。しかし、私は最初により深い理解をお願いします。 注:LEFT JOINSQL Server 2012とSQL Server 2014の両方で許容可能なパフォーマンスを実現するために、クエリをとして書き換えるか、テーブルにインデックスを追加できます。この質問は、この特定のクエリを理解し、詳細に計画することに関するもので、詳細については説明しません。クエリの言い方を変えるには 遅いクエリ 完全なテストスクリプトについては、このPastebinを参照してください。これが私が見ている特定のテストクエリです: -- Prune any existing customers from the set of potential new customers -- This query is much slower than expected in SQL Server 2014 SELECT …

4
ソースLOB列を処理するときの「行ごとの」フェッチメソッドの回避
SSISを使用して新しいSQL Serverスキーマに移行しようとしているレガシーPostgreSQLデータベースソース(ODBC)があります。次のような警告が表示されます。 テーブルにLOB列があるため、「Row by Row」フェッチメソッドが適用されます。列の内容はLOBです 実は、どの列も実際にLOBである必要はありません。TEXT型はいくつかありますが、varchar(max)内に簡単に収まります。でも見知らぬ人は、しかし、最もすでにある VARCHARが、それはLOBであるかのように扱われているvarchar型以上のもの(128)らしい(事前のプロパティでは、データ型はDT_NTEXTです)。 selectステートメントですべての文字列型を適切な長さのvarcharに明示的にキャストし、ODBCソースでDT_NTEXTとして設定されているSQLコマンドを手動で実行しようとしました。 私はDBAではないので、本当に愚かなことをしている可能性は十分にあります。バッチフェッチできるように、型が最終的にvarcharになるようにするための最良の方法を知りたいのですが。何か案は? 必要に応じて、Visual Studio 2013内でSSIS-BI 2014を使用しています。



2
インデックス付きビューが一意でないクラスター化インデックスを許可しないのはなぜですか?
インデックス付きビューを使用して、最もよく使用されるいくつかのビューのパフォーマンスを向上させることを検討してきました。 ただし、インデックス付きビューは、一意ではないクラスター化インデックスをサポートしていません。これは、データベース構造の残りの部分によって設定された優先順位に少し影響します。 たとえば、ここにいくつかのテーブルの簡略化したバージョンがあります。 -Groups- Group ID GroupName -Users- UserKey UserName FullName GroupID インデックスは、Groups.GroupID(非クラスター化)およびUsers.GroupID(クラスター化)にあります。クラスター化されたキーは、最も一般的には特定のグループの一連のユーザーが取得されるため、UsersテーブルのGroupIDにあります。当然、グループごとに複数のユーザーがいるため、このクラスター化インデックスは一意ではありません。 このため、この例のようにビューにインデックスを付けるときに、この優先順位に従う方法が少し不確かになります。これは、一意でないクラスター化インデックスを持つことができないためです。 ConsumableID ConsumableVariantID AllowThresholdOverwrite FullPath GroupID ManufacturerID Type ModelID 101 29 1 0.1.2.4. 4 3 3 2 実際には、常に一意であるこのビューの唯一の値はConsumableID列です。そのため、インデックスを配置する場所についてほとんど選択肢がありません。 通常のテーブルで許可されているのに、ビューが一意でないクラスター化インデックスを許可しないのはなぜですか?

3
「データベースは移行中です」エラー
今日、既存のデータベースの上にデータベースを復元しようとしていましたが、SSMSでデータベースを右クリックしただけです->タスク->オフラインにして、データベースを復元できるようにしました。 小さなポップアップウィンドウが表示されQuery Executing.....、しばらく表示された後、エラーメッセージが表示されましたDatabase is in use cannot take it offline。そこから収集したデータベースへのアクティブな接続がいくつかあるので、次のクエリを実行しようとしました USE master GO ALTER DATABASE My_DatabaseName SET OFFLINE WITH ROLLBACK IMMEDIATE GO この時点でも、SSMSはしばらくの間Query Executing.....表示し、次のエラーをスローしました。 Msg 5061, Level 16, State 1, Line 1 ALTER DATABASE failed because a lock could not be placed on database 'My_DatabaseName'. Try again later. Msg 5069, …

1
データウェアハウジングシナリオで「統計の自動更新」を無効にする必要がありますか?
SQL Serverに200 GBのデータウェアハウスがあります。 一部のクエリの実行時間が非常に遅くなっています。たとえば、をdelete使用した単純なクエリの場合は12時間ですinner join。 実行計画でいくつかの調査を行った後、WITH FULLSCANオプションを使用して、クエリに関連する2つのテーブルの統計を更新しました。 クエリは1秒未満で実行されるようになったため、統計は最新ではなかったようです。 auto update statisticsデータベースを無効にしてUPDATE STATISTICS、データウェアハウスの読み込み後に手動で実行することを検討しています。データウェアハウスは、ソースERPシステムから毎日、夜間に段階的に読み込まれます。 auto update statisticsデータウェアハウジングシナリオでは本当に役に立たないと想定しても正しいですか?代わりに、データのロード後に統計を手動で更新する方が理にかなっていますか?

1
PowershellでSSMSから印刷されたメッセージを取得する
私たちのDBAチームは、以下を使用してバックアップを検証していませんTSQL(バックアップ後に簡単に実行でき、ほとんど時間がかからないので、理由がわかりません)。 RESTORE VERIFYONLY FROM DISK = 'D:\Backups\LOCATION' 彼らは過去に問題を抱えていたので、そこから学べると思っていても、そうではありません。約100台以上のサーバーがあり、すべてのバックアップに対してこのスクリプトを実行して、それらが有効であることを確認するため、これを行うためにPowershellスクリプトを作成しました。以下のスクリプトは正しく実行されます(エラーが発生したり、エラーが発生したりしないため)、PowerShellで印刷されたメッセージを取得する方法があり、SSMSで通常取得する方法があり、ファイル1のバックアップセットは検証として有効です。 $SqlCon = New-Object System.Data.SqlClient.SqlConnection $SqlCon.ConnectionString = "SERVER=SERV\INST;Integrated Security=true;DATABASE=master" $baks = Get-ChildItem "D:\Backups\" -Filter *.BAK foreach ($bak in $baks) { $SqlCon.Open() $cd = New-Object System.Data.SqlClient.SqlCommand $cd.Connection = $SqlCon $cd.CommandText = "RESTORE VERIFYONLY FROM DISK = @f" $cd.Parameters.Add("@f", $bak.FullName) $cd.ExecuteNonQuery() $SqlCon.Close() }

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