データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

2
LIKEステートメントでPIVOTすることは可能ですか
テーブルの要素(などCOLUMN LIKE='Value%')でグループ化することはできPIVOTますか?(データベース、インスタンスなどの)さまざまなステータスを含むテーブル[DBT]。[Status]があり、すべてのPRODとTESTの値を単一の値としてピボット/クエリしたくありませんが、それらをグループ化します。 例えば、代わりにステータスの列を有しているとProd、Prod ACC、Prod APP、...など私はのための値を含む1列のみであろうName LIKE 'Prod%'としName LIKE 'Test%'。 これまでのところ: テーブル定義 CREATE TABLE [DBT].[Status]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Status] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) …

1
xml path( '')出力の場合
次を実行すると select t.type from (values ('Green'),('Blue'),('Red')) as t(type) for xml path('') この出力を受け取ります <type>Green</type> <type>Blue</type> <type>Red</type> 次を実行すると select t.type + '/' from (values ('Green'),('Blue'),('Red')) as t(type) for xml path('') この出力を受け取ります Green/Blue/Red/ selectに連結を追加すると、typeタグが削除され、xmlファイルの1行に出力されるのはなぜですか?SQL Server 2012を実行しています。

2
SELECTは、VACUUMのようにデッド行を削除しますか?
私はいじくり回していて、テーブルから行をingすることで、後で行う必要のある作業が減るようVACUUMな予期しない動作に気づきました。SELECTVACUUM テストデータ 注:自動バキュームは無効になっています CREATE TABLE numbers (num bigint); ALTER TABLE numbers SET ( autovacuum_enabled = 'f', toast.autovacuum_enabled = 'f' ); INSERT INTO numbers SELECT generate_series(1, 5000); 試験1 次に、すべての行に対して更新を実行します。 UPDATE numbers SET num = 0; そして走るVACUUM (VERBOSE) numbers;と、 INFO: vacuuming "public.numbers" INFO: "numbers": removed 5000 row versions in 23 pages INFO: …

3
FROM句がなく、エラーにならないのはなぜですか?
そのため、タイプミスのあるサブクエリを含むクエリがあります。FROM句がありません。しかし、実行してもエラーにはなりません!なぜ!? SELECT 1 ,r.id ,'0D4133BE-C1B5-4141-AFAD-B171A2CCCE56' ,GETDATE() ,1 ,'Y' ,'N' ,oldItem.can_view ,oldItem.can_update FROM Role r JOIN RoleObject oldReport ON r.customer_id = oldReport.customer_id JOIN RoleItem oldItem ON oldReport.id = oldItem.role_object_id AND r.id = oldItem.role_id WHERE r.id NOT IN (SELECT role_id WHERE role_object_id = '0D4133BE-C1B5-4141-AFAD-B171A2CCCE56') AND oldReport.id = '169BA22F-1614-4EBA-AF45-18E333C54C6C'

3
実際の変更でのみ発生するT-SQLトリガーはどのように作成されますか?
別のテーブルに行を追加するUPDATEおよびINSERTのテーブルトリガーがあります。4つの列のいずれかが変更された場合にのみ行を追加する必要があります。IF UPDATE(col)を使用して変更をテストしようとしましたが、盲点がありました。これは、いくつかの値が入ったことをテストするだけです。深く掘り下げる必要があります。新旧の値を比較して、真の変化が発生したことを確認する必要があります。INSERTとUPDATEの両方で機能する必要があります。 挿入されたテーブルと削除されたテーブルの両方にトリガー内で比較できる値があるため、簡単なUPDATEの場合。ただし、INSERTの場合、値を持つのは挿入テーブルだけです。これはすべて同じトリガーで必要なので、そのINSERTケースをどのように処理しますか? これが、変更するトリガーのスクリプトです。 ALTER TRIGGER [dbo].[trATPerson_alter] ON [mydb].[dbo].[AT_Person] AFTER INSERT,UPDATE AS BEGIN SET NOCOUNT ON; -- Not all updates require a push IF (UPDATE([First_Name]) OR UPDATE([Last_Name]) OR UPDATE([JobCode]) OR UPDATE([Inactive])) BEGIN INSERT INTO [mydb].[dbo].[AT_Person_To_Push] ( [Facility], [VendorID], [Person_code], [First_Name], [Last_Name], [JobCode], [Alink], [Inactive] ) SELECT [Facility], [VendorID], [Person_code], [First_Name], …
9 t-sql  trigger 

1
どうやら、私のCLRアセンブリ関数がデッドロックを引き起こしていますか?
私たちのアプリケーションは、OracleデータベースまたはMicrosoft SQL Serverデータベースと同等にうまく機能する必要があります。これを容易にするために、クエリ構文を均質化する少数のUDFを作成しました。たとえば、SQL ServerにはGETDATE()があり、OracleにはSYSDATEがあります。それらは同じ機能を実行しますが、それらは異なる単語です。共通の関数名で関連するプラットフォーム固有の構文をラップする、両方のプラットフォーム用のNOW()と呼ばれるラッパーUDFを作成しました。他にもそのような機能がありますが、その一部は本質的に均質化のためだけに存在します。残念ながら、これにはSQL Serverのコストがかかります。インラインスカラーUDFはパフォーマンスに悪影響を及ぼし、並列処理を完全に無効にします。別の方法として、同じ目標を達成するためにCLRアセンブリ関数を作成しました。これをクライアントに展開すると、デッドロックが頻繁に発生し始めました。この特定のクライアントはレプリケーションと高可用性の技術を使用しているため、ここで何らかのやり取りが行われているのではないかと思います。CLR関数を導入すると、このような問題がどのように発生するのか理解できません。参考までに、元のスカラーUDF定義と、C#の置換CLR定義およびそのSQL宣言を含めました。また、それが役立つ場合に提供できるデッドロックXMLもあります。 元のUDF CREATE FUNCTION [fn].[APAD] ( @Value VARCHAR(4000) , @tablename VARCHAR(4000) = NULL , @columnname VARCHAR(4000) = NULL ) RETURNS VARCHAR(4000) WITH SCHEMABINDING AS BEGIN RETURN LTRIM(RTRIM(@Value)) END GO CLRアセンブリ関数 [SqlFunction(IsDeterministic = true)] public static string APAD(string value, string tableName, string columnName) { return value?.Trim(); } …


3
SQL Serverは、コミットする前に、トランザクション内のトランザクションへのDDLを許可(可視化)しますか?
PostgreSQLでは、いくつかのテストデータを使用してテーブルを作成し、トランザクションでそれを別のタイプの新しい列に移行することで、1回のテーブル書き換えでCOMMIT、 CREATE TABLE foo ( a int ); INSERT INTO foo VALUES (1),(2),(3); に続く、 BEGIN; ALTER TABLE foo ADD COLUMN b varchar; UPDATE foo SET b = CAST(a AS varchar); ALTER TABLE foo DROP COLUMN a; COMMIT; ただし、MicrosoftのSQL Serverでは同じことがエラーを生成するようです。この作業の比較デシベルのフィドル、ADD(列)コマンドは、トランザクションの外にあります -- txn1 BEGIN TRANSACTION; ALTER TABLE foo ADD b varchar; COMMIT; …

2
単一の行をアンピボットするときに、役に立たない並列分岐をどのようにして取り除くことができますか?
少数のスカラー集計をアンピボットする次のクエリを考えてみます。 SELECT A, B FROM ( SELECT MAX(CASE WHEN ID = 1 THEN 1 ELSE 0 END) VAL1 , MAX(CASE WHEN ID = 2 THEN 1 ELSE 0 END) VAL2 , MAX(CASE WHEN ID = 3 THEN 1 ELSE 0 END) VAL3 , MAX(CASE WHEN ID = 4 THEN 1 …

2
主キーのないテーブルは正規化されていますか?
講義では、講師が主キーのないテーブルを見せてくれました。質問したところ、彼は3NFで推移的な依存関係を削除するときに、主キーのないテーブルがあっても問題ないと述べました。 ただし、主キーがないということは、機能上の依存関係がないことを意味しますが、3NFは推移的な依存関係の削除であり、すべての機能上の依存関係のため、各テーブルには正規化のための主キーが必要であると教えられました。 主キーなしでテーブルを作成することは完全に可能ですが、そのテーブルが存在する場合、そのデータベースは正規化されていると見なされますか? 追加する必要があります。テーブルには「一意のキー」、プライマリ、コンポジット、外部はありません。 表示されているテーブルには3つの属性があり、どれもプライマリまたは一意としてラベル付けされていません。私はそれが間違いかどうか尋ねました、そして彼はそれがなくても大丈夫だと言いました。この表の情報を一意に特定できないため、私はその発言に疑問を投げかけ、彼はこのようにしてよいと主張しました。これは私が正規化について教えられたことに反しています。

1
欠落している非クラスター化インデックスは既にクラスター化インデックスの一部です
実行速度の遅いクエリをデバッグしています。実行プランでは、非クラスタ化インデックスが推奨され、51.6648の影響があります。ただし、非クラスター化インデックスには、主キー(PK)複合クラスター化インデックスに既に含まれている列のみが含まれます。 これは、インデックス内の列の順序が原因である可能性がありますか?つまり、クラスター化インデックスの列の選択性が最も高いものから低いものへの順序ではない場合、非クラスター化インデックスがパフォーマンスを向上させる可能性はありますか? さらに、非クラスター化インデックスには3つのPK列のうち2つだけが含まれ、3番目の列は包含列として追加されます。あるinclude非クラスタ化インデックスの使用がより最適かもしれないもう一つの理由? 以下は、私が使用しているテーブル構造の例です。 テーブル- Retailers ( RetailerID int PK, name ...) Retailer_Relation_Types ( RelationType smallint PK, Description nvarchar(50) ...) Retailer_Relations ( RetailerID int PK FK, RelatedRetailerID int PK FK, RelationType smallint PK FK, CreatedOn datetime ...) テーブルにRetailer_Relationsは、次の複合PKインデックスと推奨インデックスがあります。 CONSTRAINT PK_Retailer_Relations PRIMARY KEY CLUSTERED ( RetailerID ASC, RelatedRetailerID ASC, RelationType ASC …

3
キーワード「ALIAS」は実際に使用されていますか?
PostgreSQL 7.1から9.1(現在はサポートされていません)によればALIAS、少なくともSQL-99では予約語としてリストされています。それ以降のバージョンでは表示されません-予約語として削除されたことを示しています。古いPostgreSQLのドキュメントには、「キーワードの存在は機能の存在を示すものではありません」と書かれています。テーブルまたは列にエイリアスを付けるとき、私は見ましたが、見ASたことはありませんALIAS。 SQLキーワードはどこでALIAS使用されましたか(または使用されましたか)?使用中だったのか、将来使用するために予約されただけなのか。

1
1日を通してランダムに統計が消える/空になる
SQL Server 2017(CU9)データベースを使用していますが、これは、インデックス統計に関連していると思われるパフォーマンス関連の問題をいくつか示しています。トラブルシューティング中に、統計が更新されていないことを発見しました(DBCC SHOW_STATISTICSがすべてのNULL値を返すことを意味します)。 影響を受けるテーブルでUPDATE STATISTICSを実行し、SHOW_STATISTICSが昨日の午後4時に実際の値を返すことを確認しました。今朝8:00 AMに統計は再び空になりました(NULL値を返します)。 クライアントには、毎日午前4:00に実行するようにスケジュールされたメンテナンスジョブがあり、データベースのインデックスを再作成してから、データベース全体に対してsp_updatestatsを実行します。統計が午前4時にプロファイラートレースで更新されることを確認しました。 なぜ統計が空になるのか途方に暮れていますが、それは4:00 AMに実行されているメンテナンスジョブですか?このバージョンのSQL Serverで気付いていないバグはありますか? よろしくお願いします。 より詳しい情報: 自動統計更新が有効になっています。 統計の自動更新を非同期で無効にします。 増分統計の自動作成が無効になっています。 スクリプトの再インデックス(難読化): USE DBNAME; DECLARE @CERTENG_Lock INT DECLARE @WebSite_Control_ProcessRunning_Lock INT DECLARE @WebSite_Control_Disabled_Lock INT DECLARE @LogMessage VARCHAR(1024) SELECT @CERTENG_Lock = Lock FROM application.CERTENG_Lock SELECT @WebSite_Control_Disabled_Lock = MAX(CAST(Disabled AS INT)), @WebSite_Control_ProcessRunning_Lock = MAX(CAST(ProcessRunning AS INT)) FROM application.WebSite_Control …

1
統合データウェアハウスと分散データウェアハウスの違いは何ですか?
これらの明確な定義や説明は見つかりません。どちらも分散型のようです。フェデレーテッドDWHでは、データは分散され、単一のリポジトリに統合されず、分散ソースからアクセスされるようです。 分散型DWH実装では、データは1つの中央リポジトリに統合されます。 これら2つの実装の違いを説明してください。

1
測定プランの削除
最大メモリが24GBに設定されたSQL Server 2016 SP1があります。 このサーバーには多数のコンパイルがあり、これらのコンパイルの10%のみがアドホッククエリからのものです。したがって、新しくコンパイルされたプランはプランキャッシュに保存されますが、プランキャッシュのサイズは増加していません(約3.72GB)。 キャッシュからのプランの削除につながるローカルメモリのプレッシャーがあると思います。プランのキャッシュ圧力制限は5GBです。(0-4GBの可視ターゲットメモリの75%+ 4GB-64GBの可視ターゲットメモリの10%+可視ターゲットメモリの5%> 64GB)。キャッシュストアが圧力制限の75%に達したら、プランをキャッシュから削除する必要があります。私の場合、5 GBの75%は3.75GBです。したがって、これが高コンパイルの原因であると考えられます。 キャッシュからの計画からの削除を測定する方法(perfmon、拡張イベントなど)はありますか?だから私は確かにローカルメモリのプレッシャーが高コンパイルの原因であることを確信できますか?

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