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

Azure SQL Databaseは、Microsoftのサービスとしてのリレーショナルデータベースです。このタグは、Azure VMでホストされているSQL Serverではなく、Azure SQLデータベースに関する質問用です(azure-vmを使用)。

5
既存の違反を無視する一意の制約を追加できますか?
現在、列に重複した値があるテーブルがあります。 これらの誤った重複を削除することはできませんが、一意でない値が追加されないようにしたいと思います。 UNIQUE既存のコンプライアンスをチェックしないを作成できますか? 使用してみましNOCHECKたが、失敗しました。 この場合、ライセンス情報を「CompanyName」に関連付けるテーブルがあります 編集:同じ「CompanyName」を持つ複数の行を持つことは悪いデータですが、現時点ではそれらの重複を削除または更新することはできません。1つのアプローチはINSERT、重複に対して失敗するストアドプロシージャをsに使用させることです... SQLが独自に一意性をチェックすることが可能であれば、それが望ましいでしょう。 このデータは会社名で照会されます。少数の既存の重複について、これは複数の行が返されて表示されることを意味します...これは間違っていますが、ユースケースでは許容できます。目標は、将来それを防ぐことです。コメントから、ストアドプロシージャでこのロジックを実行する必要があるようです。

4
EF Code Firstは、すべての文字列にnvarchar(max)を使用します。これによりクエリのパフォーマンスが低下しますか?
Entity Framework Code Firstを使用していくつかのデータベースを作成しています。アプリは正常に動作しており、一般的にCode Firstでできることにはかなり満足しています。私は必然的にプログラマーであり、DBAは2番目です。私はデータベースで何をしたいのかをC#でさらに説明するためにDataAttributesについて読んでいます。私の質問は、これらのnvarchar(max)文字列をテーブルに入れることでどのようなペナルティを食べるのかということです(下の例を参照)。 この特定のテーブルにはいくつかの列があります。C#では、次のように定義されています。 [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ID { get; set; } public string Name { get; set; } public string Message { get; set; } public string Source { get; set; } public DateTime Generated { get; set; } public DateTime Written { get; set; } …

6
データベース全体でのGETDATE()の使用の変更
オンプレミスのSQL Server 2017データベースをAzure SQLデータベースに移行する必要がありますが、かなりの制限事項があるため、いくつかの課題に直面しています。 特に、Azure SQLデータベースはUTC時間(タイムゾーンではない)でのみ機能し、現地時間を必要とするため、データベース内のGETDATE() すべての場所の使用を変更する必要があります。 私のタイムゾーンで正しく機能するローカル時間を取得するために、ユーザー定義関数を作成しました。 CREATE FUNCTION [dbo].[getlocaldate]() RETURNS datetime AS BEGIN DECLARE @D datetimeoffset; SET @D = CONVERT(datetimeoffset, SYSDATETIMEOFFSET()) AT TIME ZONE 'Pacific SA Standard Time'; RETURN(CONVERT(datetime,@D)); END 私が問題を抱えている問題はGETDATE()、すべてのビュー、ストアドプロシージャ、計算列、デフォルト値、その他の制約などでこの関数を実際に変更することです。 この変更を実装する最良の方法は何でしょうか? マネージドインスタンスの公開プレビュー中です。それでも同じ問題がGETDATE()発生するため、この問題は解決しません。Azureへの移行は必須です。このデータベースは、常にこのタイムゾーンで使用されます(使用されます)。

1
SQL Azureの既存の主キーを変更するにはどうすればよいですか?
SQL Azureテーブルの既存のプライマリキーを変更したい。 現在、1つの列があり、別の列を追加したいと思います。 さて、SQL Server 2008では、これは簡単なことでした。SSMSでやっただけです。できた これは、SQL Serverからスクリプトを作成した場合のPKの外観です。 ALTER TABLE [dbo].[Friend] ADD CONSTRAINT [PK_Friend] PRIMARY KEY CLUSTERED ( [UserId] ASC, [Id] ASC ) ただし、SQL Azureでは、上記を実行しようとすると、もちろん失敗します。 Table 'Friend' already has a primary key defined on it. 結構です、私はキーを落とそうとします: Tables without a clustered index are not supported in this version of SQL Server. …

1
この定数スキャンと左外部結合は、単純なSELECTクエリプランのどこから来たのですか?
私はこの表を持っています: CREATE TABLE [dbo].[Accounts] ( [AccountId] UNIQUEIDENTIFIER UNIQUE NOT NULL DEFAULT NEWID(), -- WHATEVER other columns ); GO CREATE UNIQUE CLUSTERED INDEX [AccountsIndex] ON [dbo].[Accounts]([AccountId] ASC); GO このクエリ: DECLARE @result UNIQUEIDENTIFIER SELECT @result = AccountId FROM Accounts WHERE AccountId='guid-here' 単一のインデックスシークで構成されるクエリプランで実行します-予想どおり: SELECT <---- Clustered Index Seek このクエリは同じことを行います。 DECLARE @result UNIQUEIDENTIFIER SET …

1
日付の比較を行うサブクエリのパフォーマンスが悪い
サブクエリを使用して、一致するフィールドを持つすべての以前のレコードの合計数を検索する場合、5万件のレコードがあるテーブルでパフォーマンスはひどいです。サブクエリがなければ、クエリは数ミリ秒で実行されます。サブクエリを使用すると、実行時間は1分以上になります。 このクエリの場合、結果は次のようになります。 特定の日付範囲内のレコードのみを含めます。 日付範囲に関係なく、現在のレコードを含まない、以前のすべてのレコードのカウントを含めます。 基本的なテーブルスキーマ Activity ====================== Id int Identifier Address varchar(25) ActionDate datetime2 Process varchar(50) -- 7 other columns サンプルデータ Id Address ActionDate (Time part excluded for simplicity) =========================== 99 000 2017-05-30 98 111 2017-05-30 97 000 2017-05-29 96 000 2017-05-28 95 111 2017-05-19 94 222 2017-05-30 推測される結果 日付範囲のため2017-05-29に2017-05-30 …

2
SELECT TOPでインデックスが使用されないのはなぜですか?
要約は次のとおりです。選択クエリを実行しています。WHEREand ORDER BY句のすべての列IX_MachineryId_DateRecordedは、キーの一部として、またはINCLUDE列として、単一の非クラスター化インデックスに含まれます。すべての列を選択しているので、ブックマークルックアップTOP (1)になりますが、を取得するだけなので、サーバーはルックアップを最後に一度だけ実行する必要があることを確認できます。 最も重要なことは、クエリでindexを使用するように強制するとIX_MachineryId_DateRecorded、1秒未満で実行されることです。使用するインデックスをサーバーに決定させると、サーバーが選択しIX_MachineryId、最大1分かかります。これは、私がインデックスを正しく作成したことを本当に示唆しており、サーバーは単に悪い判断を下しています。どうして? CREATE TABLE [dbo].[MachineryReading] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Location] [sys].[geometry] NULL, [Latitude] FLOAT (53) NOT NULL, [Longitude] FLOAT (53) NOT NULL, [Altitude] FLOAT (53) NULL, [Odometer] INT NULL, [Speed] FLOAT (53) NULL, [BatteryLevel] INT NULL, [PinFlags] BIGINT NOT NULL, [DateRecorded] DATETIME NOT …

4
TSQLがPOWER(2.、64。)に対して間違った値を返すのはなぜですか?
select POWER(2.,64.)の18446744073709552000代わりに戻ります18446744073709551616。精度は16桁しかないようです(17桁を丸めます)。 精度を明示的にしselect power(cast(2 as numeric(38,0)),cast(64 as numeric(38,0)))ても、丸められた結果が返されます。 これは、このように16桁の精度で任意にフレークアウトするための非常に基本的な操作のようです。それが正しく計算できる最高はPOWER(2.,56.)、失敗しただけですPOWER(2.,57.)。ここで何が起こっていますか? 本当にひどいのは、select 2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.;実際に正しい値を返すということです。簡潔さのために。

1
Azureでデータベースをv11からv12にいつ、誰が更新したかを確認できますか?
今日、私はすべてのAzure SQLデータベースサーバーがv11からv12に更新されたことに気付きました。私は自分の会社でこれらのダイヤルに触れる必要がある唯一の人ですが、アクセスできるのは私の会社だけではありません。このアップグレードを開始しなかったため、誰が、いつこの計画外の更新が行われたのかを知りたいと思います。 WTFに情報を丁寧に尋ねるアクセス権を持つ社内の全員にメールを書くことができることは知っていますが、できるだけ多くの事実との会話を開始したいです。また、すべてのサーバーをアップグレードするのはあまりにも意図的に感じられるため、これはMicrosoft / Azure SNAFUであると思う傾向があります。

4
Azure SQL Databaseのアプリケーションでは「ユーザーのログインに失敗しました」が、SSMSでは正常に機能する
Azure SQL Database V12に含まれるデータベースユーザー機能を試してみたかったのですが、認証に問題があり、奇妙に思えます。 というデータベースを作成しましたClassifier。ワークステーションのSSMSからAzure dbサーバーに接続できるように、ファイアウォールルールにIPを追加しました。管理のためにSSMSを介して接続できるようになったら、次のようにパスワードを持つユーザーをデータベースに追加してみました。 CREATE USER classifier WITH PASSWORD='thepassword' また、このユーザーをデータライターおよびリーダーの役割に追加しました。 exec sp_addrolemember 'db_datawriter', 'classifier' exec sp_addrolemember 'db_datareader', 'classifier' この後、SSMSからのこれらの資格情報を使用してデータベースに接続できます。 しかし、これが問題の原因です。いくつかの異なる接続文字列の呪文を試してみましたが、作業中のWebアプリで接続できないようです。Azure環境では機能しなかったため、Azureデータベースへの接続文字列を使用してlocalhostで実行していますが、接続できません。現在使用している接続文字列は次のとおりです。 <add name="Classifier" connectionString="Data Source=xxxxxxx.database.secure.windows.net;Initial Catalog=Classifier;User ID=classifier;Password=xxxxxxxxxxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/> ユーザーのパスワードを(SSMS経由で)リセットしてから、接続文字列を更新しようとしました。また、この接続文字列からSSMSの接続ダイアログにパスワードをコピーしてパスワードを再確認し、そこに何らかのタイプミスがないことを確認しました。 Azure dbサーバーで監査を有効にし、失敗の理由に関する詳細を取得することを期待していますが、取得できるのはこれだけです: そして、これは私が立ち往生しているところです。ドキュメントやブログで見つけることができたもののほとんどは、SQL Serverログを調べて、エラーの性質をより厳密に示す実際のエラー状態を確認することを示していますが、 Azureを扱っているので、それを行う方法はありません(私の知る限り)。 SSMS(およびLinqPadおよびVisual Studio Server Explorer)が成功した場合、アプリケーションが失敗する原因は何ですか?

2
ブレントオザーのsp_BlitzIndexをAzureで実行するにはどうすればよいですか?
Brent OzarのWebサイトからSQL Server First Aid Kitをダウンロードしました。Azureデータベースサーバーレベルの管理者としてログインしているときに、Microsoft Sql Server Management Studioを介してmasterデータベースに対してsp_BlitzIndexスクリプトを実行しようとすると、次のエラーが発生しました。 メッセージ262、レベル14、状態18、プロシージャsp_BlitzIndex、行18 CREATE PROCEDURE権限がデータベース 'master'で拒否されました。 テストするデータベースインスタンスでプロシージャを正常に作成しました。プロシージャを実行すると、次のようなエラーが表示されました。 メッセージ50000、レベル16、状態1、行1265無効なオブジェクト名「mydatabase.sys.partitions」。 次に、巧妙にしようとし、ストアドプロシージャを作成せずにmasterデータベースに対して直接ストアドプロシージャコードを実行しようとすると、次のエラーが発生しました。 Msg 50000、レベル15、状態1、行1267 'mydatabase.sys.indexes'のデータベースおよび/またはサーバー名への参照は、このバージョンのSQL Serverではサポートされていません。 〜2700行のインデックスヒューリスティックロジックの内部動作をいじり始めるのに十分な自信がありません。このストアドプロシージャをAzure SQL Databaseで適切に動作させるための迅速かつ簡単な方法はありますか、それともインデックス分析ツール/ストアドプロシージャを他の場所で探す必要がありますか?

6
非常に大きな主キーインデックスを再構築する
AzureでホストされているSQLデータベースがあります。問題は、サイズが制御不能になっていることです。主キーのクラスター化インデックスで最大99%の断片化が見られます。 他のすべてのインデックスをonline=onオプションで再構築できますが、パフォーマンスには影響しません。PKクラスター化インデックスの1つのサイズが200GBを超えているため、この1つでREBUILD...WITH (ONLINE=ON)はロックが発生します。 すべてのタイムゾーンのユーザーがサイトにアクセスしているため、オフラインでインデックスを再構築できる時間を見つけることができません。 サイトでダウンタイムを発生させずに大きなインデックスを再構築するための最良の戦略は何ですか? 断片化は99%なので、再編成しても効果がないと思います。問題は、オンラインでもテーブルがロックされることです。主な問題は、インデックスが200GBを超えることです。主キーは整数です。

1
SQL Serverによる遅い順序
私のアプリケーションには、「ファイル」テーブルで検索を実行するクエリがあります。 テーブル "files"は、 "f"。 "created"でパーティション分割されています(テーブル定義を参照してください。クライアント19には〜26,000,000行あります( "f"。 "cid = 19)。 ここでのポイントは、このクエリを実行する場合です。 SELECT "f"."id" AS "FileId" , "f"."name" AS "FileName" , "f"."year" AS "Fileyear" , "f"."cid" AS "clientId" , "f"."created" AS "FileDate" , CASE WHEN ("vnVE0"."value" is not null AND "vnVE0"."value" != '') THEN CAST("vnVE0"."value" AS decimal(28,2)) ELSE 0 END AS "keywordValueCol0_numeric" …

2
WHERE句が「含まれる」列の恩恵を受けるのはなぜですか?
この回答によれば、制限に使用される列にインデックスが構築されない限り、クエリはインデックスの恩恵を受けません。 私にはこの定義があります: CREATE TABLE [dbo].[JobItems] ( [ItemId] UNIQUEIDENTIFIER NOT NULL, [ItemState] INT NOT NULL, [ItemPriority] INT NOT NULL, [CreationTime] DATETIME NULL DEFAULT GETUTCDATE(), [LastAccessTime] DATETIME NULL DEFAULT GETUTCDATE(), -- other columns ); CREATE UNIQUE CLUSTERED INDEX [JobItemsIndex] ON [dbo].[JobItems]([ItemId] ASC); GO CREATE INDEX [GetItemToProcessIndex] ON [dbo].[JobItems]([ItemState], [ItemPriority], [CreationTime]) INCLUDE (LastAccessTime); …

5
Azure SQL Databaseから不適切な実行プランを削除するにはどうすればよいですか?
DBCC FREEPROCCACHEAzure SQL DBでは機能しません。どうすれば、実稼働システムを傷つけないように計画を強制的にキャッシュから追い出すことができますか(つまり、テーブルを自由に変更することはできません)。これは特にEntity Frameworkによって作成されたSQL向けであるため、これらは自己管理型のストアドプロシージャではありません。事実上動的なSQLです。 (ソースは悪いインデックス->悪い統計などでした。それはすべて修正されましたが、悪い計画は消えません。) 更新: 彼が最初に到着したとき、@ mrdennyのソリューションを選択しました。ただし、@ Aaron Bertrandのスクリプトを使用して作業を正常に実行しています。みんな助けてくれてありがとう!!

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