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

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

4
database_scoped_configurationsのバグ
私は結果セットを挿入しようとしています: SELECT * FROM sys.database_scoped_configurations サーバー上のすべてのデータベースの設定を確認したいので、一時テーブルに入れます。だから私はこのコードを書きました: DROP TABLE IF EXISTS #h CREATE TABLE #h(dbname sysname, configuration_id INT, name sysname, value SQL_VARIANT, value_for_secondary SQL_VARIANT) EXEC sys.sp_MSforeachdb 'USE ?; insert into #h(dbname, configuration_id, name, value,value_for_secondary) SELECT ''?'' as dbname, * FROM sys.database_scoped_configurations D' SELECT * FROM #h H ただし、データベースごとに1行しかなく、各データベースで単純な選択を実行すると予想される4行はありません。 これをコード化するには、sp_MSForEachDBを使用するよりも優れた方法があることを知っているので、いくつか試しました。しかし、データベースごとに1行しか取得できません。SQL Server 2016 …

2
インストール後にSQL Serverネットワーク構成ノードが構成マネージャーに表示されない
Windows 2012 R2 Datacenter 64ビットを実行しているサーバーがあります。SQL 2016 RC3を問題なく使用していたので、MSDNのRTMビルドに置き換えたいと思います。 RC3をアンインストールしてからRTMをインストールした後、サーバーにリモートで接続できませんでした。調べたところ、「SQL Serverネットワーク構成」のノードがないことがConfiguration Managerで確認できました。32ビットバージョンがリストされ、TCP / IPが有効になっています。この不足しているノードをインストールするにはどうすればよいですか? SQLブラウザーサービスを開始し、2016インストールを修復しようとしました。この不足しているコンポーネントを復活させるものは何もないようです。 RC3とRTMのインストールの一部が残っており、アンインストールできないことが興味深いです。これが適切かどうかはわかりません。SQL Serverのアンインストールに関するMicrosoftの指示に従って、すべてが正しく行われたように感じました。

2
2つの列を追加するとクエリが応答しない
2つの列を選択に追加すると、クエリが応答しません。列のタイプはですnvarchar(2000)。それは少し珍しいです。 SQL Serverのバージョンは2014です。 プライマリインデックスは1つだけです。 レコード全体はわずか1000行です。 これが以前の実行計画です(XML showplan): 後の実行計画(XML showplan): これがクエリです: select top(100) Batch_Tasks_Queue.id, btq.id, Batch_Tasks_Queue.[Parameters], -- this field btq.[Parameters] -- and this field from Batch_Tasks_Queue with(nolock) inner join Batch_Tasks_Queue btq with(nolock) on Batch_Tasks_Queue.Start_Time < btq.Start_Time and btq.Start_Time < Batch_Tasks_Queue.Finish_Time and Batch_Tasks_Queue.id <> btq.id and btq.Start_Time is not null and btq.State …

2
sp_msforeachdbは、舞台裏でどのように正確に機能しますか?
発生している問題をトラブルシューティングする必要があります。また、問題を解決するためにsp_msforeachdbがどのように機能するかを理解するための支援が必要です。 sp_msforeachdbを実行するたびにエラーが発生する Msg 102, Level 15, State 1, Incorrect syntax near '61' 私のコードの例は次のとおりです: EXEC SP_msforeachdb 'SELECT ''?'' AS Database FROM ?.sys.objects WHERE name like ''%aetna%'' ただし、sp_msforeachdbのパラメーターとしてどのクエリを使用してもかまいません。同じエラーが発生するたびに。「61s1d」で始まるデータベースがあるので、DB名に問題があると思いますが、sp_msforeachdbの背後で何が起こっているのか、正直にわかりません。 注意事項。 数字で始まる唯一のデータベース 「データベースが '%61%'のようなものではありません……」のようなコードを使用することはできますが、それでも同じエラーが発生します。 データベース名の変更をテストすることはできません-接続しているものが多すぎます。 「51」で始まるテストデータベースを作成すると、そのデータベースのエラーも表示されます どうすればこれを克服できますか?

2
> =および>のカーディナリティ推定(ステップ内統計値)
SQL ServerがSQL Server 2014のwhere句の「より大きい」と「等しい」をどのように推定するかを理解しようとしています。 私がそうすれば、それがステップに到達したときのカーディナリティ推定は理解していると思います select * from charge where charge_dt >= '1999-10-13 10:47:38.550' カーディナリティの推定値は6672で、32(EQ_ROWS)+ 6624(RANGE_ROWS)+ 16(EQ_ROWS)= 6672(下のスクリーンショットのヒストグラム)として簡単に計算できます。 しかし、私がするとき select * from charge where charge_dt >= '1999-10-13 10:48:38.550' (時間を10:48に増やしたため、ステップではありません) 推定値は4844.13です。 それはどのように計算されますか?

2
関数を呼び出すときにスキーマプレフィックス(dbo)が必須なのはなぜですか?
ユーザーがデフォルトのスキーマ(dbo)でマップされ、スキーマにプレフィックスを付けずに[dbo]の下のすべてのテーブルを選択できる場合。 デフォルトのスキーマの下にある場合、プレフィックスなしでストアドプロシージャを実行できます。 それでは、なぜ関数の前にスキーマを付ける必要があるのでしょうか。 ありがとう!

1
テーブルに格納された階層内の階層的な権限
次のデータベース構造を想定します(必要に応じて変更可能)... ページと有効なアクセス許可を含む行を返すことができるように、特定のページで特定のユーザーの「有効なアクセス許可」を決定するための良い方法を探しています。 理想的なソリューションには、現在のユーザーの特定のページ行の「有効な権限」を評価するために必要な再帰を実行するためにCTEを使用する関数が含まれると考えています。 背景と実装の詳細 上記のスキーマは、コンテンツ管理システムの開始点を表しており、ロールにユーザーを追加したり、ロールからユーザーを削除したりすることで、ユーザーに権限を付与できます。 システム内のリソース(ページなど)はロールに関連付けられており、そのロールにリンクされたユーザーのグループに付与する権限を付与します。 すべてのロールを拒否し、ツリー内のルートレベルページをそのロールに追加して、ユーザーをそのロールに追加するだけで、ユーザーを簡単にロックダウンできるようにするという考え方です。 これにより、(たとえば)会社で働いている請負業者が長期間利用できない場合でも権限構造をそのままにしておくことができます。これにより、その1つのロールからユーザーを削除するだけで、元の権限を同じように付与することもできます。 。 アクセス許可は、これらのルールに従うことによってファイルシステムに適用される可能性がある一般的なACLタイプのルールに基づいています。 CRUD許可はヌル可能ビットにする必要があるため、使用可能な値はtrue、falseであり、以下の場合は定義されていません。 false +何か= false true +未定義= true true + true = true 未定義+未定義=未定義 いずれかの権限がfalseの場合-> false そうでない場合はtrue-> true その他(すべて未定義)-> false つまり、ロールメンバーシップを介して権限が付与され、拒否ルールが許可ルールをオーバーライドしない限り、何も許可されません。 これが適用される権限の「セット」は、現在のページまでのツリーに適用されるすべての権限です。つまり、このページのツリー内のページに適用されるロールにfalseがある場合、結果はfalseになります。ただし、ここまでのツリー全体が定義されていない場合、現在のページには真のルールが含まれ、結果はここでは真になりますが、親では偽になります。 可能な場合はdb構造を大まかに保持したいと思います。また、ここでの目標は次のようなことを実行できるようにすることです。select * from pages where effective permissions (read = true) and user = ?したがって、どのようなソリューションでも、有効なアクセス許可を持つクエリ可能なセットを許可する必要があります。何らかの方法で(基準を指定できる限り、それらを返すのはオプションです)。 2つのページが存在し、1つが他の子であり、2つの役割が存在すると仮定します。1つは管理ユーザー用で、もう1つは読み取り専用ユーザー用であり、どちらもルートレベルのページにのみリンクされ、期待どおりの出力として次のように表示されます。 Admin user: Id, Parent, …


1
スケジュールに従ってトランザクションログをバックアップおよび切り捨てる最良の方法
私はDBAではありませんが、DBAの帽子をかぶってSQL Serverインスタンスのメンテナンスプランをセットアップする必要があります。 だから、わたしは自分のSSISの一晩のプロセスが実行されたされてきた一方でSQLタスクを実行してバックアップを実行するために-基本的に実行されているmaster.dbo.xp_create_subdirフォルダが、その後存在し、先を確保するためにBACKUP DATABASE [DbName] TO DISK = 'G:\Backups\DbName\DbName.bak' WITH INIT。 そのタスクが失敗すると、残りのプロセスは中止され、通知が届き、翌朝、トランザクションログのドライブがいっぱいになり、手動で切り捨てて先に進みます。 ..ストーリーが繰り返され、トランザクションログが再び使用可能なディスク領域を超えてしまうまで。 「手動切り捨て」スクリプトは次のようになります。 use Staging; alter database Staging set recovery simple alter database Staging set recovery full dbcc shrinkfile ('Staging_log', 0, truncateonly); go だから私はこれに飽きてきており、代わりに適切にやってみることを決心し、ここの手順に従って実際のメンテナンス計画を作成しました: ことは、私はこれを以前に行ったことがないので、いくつか質問があります。 このようなトランザクションログをバックアップすると、自動的に切り捨てられますか、それとも他に何かする必要がありますか? データとトランザクションログのバックアップを同時に実行しても大丈夫ですか?そうでない場合、これを行う適切な方法は何ですか? バックアップファイルは、サーバー上のすべてのファイルを取得して別の場所に保存する別のプロセスによって夜間に取得されます。2日後にバックアップセットを期限切れにするのは良い考えでしょうか。それらを完全に期限切れにする必要がありますか? クリーンアップタスクは、のサブフォルダの下にある「古い」.bakファイルと.trnファイルをそれぞれ削除しますG:\Backups。それは理にかなっていますか? バックアップが失敗した場合や失敗した場合にETLを失敗させることができるように、SSISでこれを行う方が良いでしょうか?それとも私のETLプロセスは気にすべきですか? これが1つの投稿に対して多すぎる質問の場合は申し訳ありません。必要に応じて、編集して複数の質問をします。それらはすべて密接に関連していると思います。

3
PKの目的でのみ、自動インクリメント/ IDENTITYフィールドを相互参照テーブルに追加する必要がありますか?
次の相互参照テーブルをSQL ServerがホストするDBに追加します。 company_id bigint not null (FK) org_path nvarchar (2048) not null company_idフィールドはid、別のテーブルのフィールドを参照します(そのフィールドが主キーです)。 同じを持つ複数のレコードも存在する可能性があることを考えるとcompany_id、主キーは両方のフィールドを使用する必要があります。ただし、org_pathSQL Serverには長すぎるため、両方のフィールドを使用してキーを作成できません。 に関してはorg_path、これが存在する唯一のテーブルです。このテーブルへのクエリがすべてのエントリまたはすべてのorg_pathエントリのいずれかを要求する可能性はほとんどありませんcompany_id。別の言い方をすると、このテーブルがによってクエリされることは疑わしいようorg_pathです。さらに、org_path更新される可能性は低く、おそらく挿入され、おそらく削除されることはほとんどありません。 行の総数は数千になると思います。 また、その理由nvarchar (2048)は、値がサードパーティのDBの値を模倣する必要があるためです。典型的な例は次のようになります \Translation Providers\[customer name]\[order name]\ 分音符号を含めることができます。 だから私の質問はこれです:自動インクリメントidフィールドを追加しcompany_idてそれを主キーとして使用する方が効率的ですか、それとも不必要なオーバーヘッドが追加されますか-そしてcompany_id、別のテーブルの主キーであるという事実にはここで効果?

4
英数字文字列の文字と数字を区切る
入力として英数字の文字列があり、それから2つの結果を取得したいと思います。 すべての数字が削除された文字列 そして 入力文字列のすべての数字の合計である整数。 たとえば、この入力の場合: GR35hc7vdH35 次の出力が必要です。 | Col1. | Col2 | ---------------------------------- | GRhcvdH | 23 | どうすればできますか?

2
hierarchyid CLRはオープンソースですか?
組み込みのhierarchyidは、パスを効率的なバイナリ形式で格納し、その他の便利な機能を提供するCLRです。 残念ながら、表現されたパスの深さには制限があり、バイナリツリーの場合は〜1427です。この制限に達することになっている複雑な既存のアプリケーションの制限を増やしたいと思います。タイプのインターフェースを変更したくありません。結果として変更する必要のあるすべてのコードに微妙なバグを導入せずに、型のインターフェイスを変更できるとは思えません。 (理論的には)hierarchyidと同じインターフェイスを実装する「binhierarchyid」CLR UDTを作成できますが、バイナリツリーのみをサポートします。これにより、900バイトの制限内にとどまったまま、深度が7000に達するはずです。それがどれほどの規模の事業になるかはわかりません。 このhierarchyid CLRのソースはどこかにありますか?

3
実行プランはINDEXを使用せず、テーブルスキャンを使用します
インデックスまたはテーブルスキャンを使用する場合、SQL Serverは統計を使用してどちらが優れているかを確認します。 2,000万行のテーブルがあります。(SnapshotKey、Measure)のインデックスと次のクエリがあります。 select Measure, SnapshotKey, MeasureBand from t1 where Measure = 'FinanceFICOScore' group by Measure, SnapshotKey, MeasureBand クエリは500k行を返します。したがって、クエリはテーブルの行の2.5%のみを選択します。 問題は、SQL Serverが私が持っている非クラスター化インデックスを使用せず、代わりにテーブルスキャンを使用する理由です。 統計を更新しました。 ただし、クエリのパフォーマンスは良好です。 テーブルスキャン 強制インデックス テーブル/インデックス構造 CREATE TABLE [t1]( [SnapshotKey] [int] NOT NULL, [SnapshotDt] [date] NOT NULL, [Measure] [nvarchar](30) NOT NULL, [MeasureBand] [nvarchar](30) NOT NULL, -- and many more fields …

1
tempdbバージョンストアに関する質問
今日、エラーに遭遇しました: エラー:3967、重大度:17 そして私が言うことができることから、それは基本的に「フルバージョンストア」です。私の店ではこれまでこのエラーに遭遇したことがないので、これは私が答えることが困難であったいくつかの質問を引き起こしました: 事前設定された最大サイズ(tempdbの合計サイズなどに基づく)がある場合、それは動的ですか? 動的でない場合に動的にする設定はありますか? これに基づいてアラートを設定できますか?(すなわち、サイズの追跡などに使用するDMV)

1
MSDBデータベースはなぜ信頼できるのですか?
TRUSTWORTHY注意しないと、この設定はかなり危険になる可能性があり、特定の状況を除いて、オフにしておくことをお勧めします。ただし、デフォルトでは、MSDBデータベースはデフォルトでTRUSTWORHTY設定さONれています。なぜだろう? このエントリをBOLで読みました 注デフォルトでは、MSDBデータベースのTRUSTWORTHY設定はONに設定されています。この設定をデフォルト値から変更すると、MSDBデータベースを使用するSQL Serverコンポーネントで予期しない動作が発生する可能性があります。 しかし、私は詳細に興味があります。なぜ具体的にオンにMSDBする必要TRUSTWORTHYがあるのですか?どの関数がそれを使用しますか?

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