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

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

2
2回実行されたジョブを見つける方法
指定された時間までに実行されたジョブをチェックするクエリはありますか?2つの時間の間にスケジュールされているジョブを確認できますが、それは望みません。 例私が知りたいジョブズそのRAN間16:00:00と17:00:00 でスケジュールされたジョブ15:00:00が1時間以上実行される可能性がある場合もあります。私はグーグルで検索をしました私が得たすべては2回の間にスケジュールされている仕事です

2
SQL Server 2014の圧縮と最大行サイズ
多くのdecimal(26,8)列を含む広い非正規化テーブルを作成する必要があります(1024列の制限より少なく、ほとんどの列はnullまたはゼロになります)。行あたりの制限は8060バイトなので、ページ圧縮を使用してテーブルを作成しようとしました。以下のコードはテーブルを作成し、1つの行を挿入し、行サイズをクエリします。行のサイズが制限をはるかに下回っていますが、テーブルにdecimal(26,8)列を1つ追加しようとすると、エラーが発生し、操作が失敗します。内部オーバーヘッドのバイト。」それだけ多くの列を持つ単一のテーブルを作成する方法はありますか? drop table t1 GO create table t1(c1 decimal(26, 8) null) with (data_compression = page) GO declare @i int = 2; declare @sql varchar(100); while @i <= 486 begin set @sql = 'alter table t1 add c' + convert(varchar, @i) + ' decimal(26, 8) null'; execute (@sql); set @i += …

2
SSMSと登録済みサーバーの結果
背景: 私たちは、AGのサポートチームの1つに「主要な」AGテストハーネスを作成しようとしています。ある時点でどのサーバーがプライマリになるかがわからないため、登録されたサーバーグループに対してTSQLを実行するように指示されています。登録されたサーバーグループは、AG内のすべてのサーバーで構成されます。目標は、現在のプライマリサーバーでのみTSQLを実行することです。 現在のテストハーネス: IF EXISTS (SELECT * FROM sys.dm_hadr_availability_replica_states AS HARS INNER JOIN sys.dm_hadr_availability_replica_cluster_states AS HACS ON HACS.replica_id = HARS.replica_id WHERE (HARS.role_desc = 'PRIMARY') AND (HACS.replica_server_name LIKE @@SERVERNAME)) BEGIN <<SOME CODE TO EXECUTE>> END 問題点: マルチサーバークエリに応答する最初のサーバーが結果を返さない場合、他のサーバーが後で結果セットを返しても、SSMSは正しい結果セットが結果セットではないと想定します。したがって、このシナリオでは結果は返されません...これは正しくなく、期待される機能ではありません。 SSMS(これはCSチームにとって最も身近なツールです)を使用して、現在のプライマリサーバーでのみ実行を強制する方法を誰かが考えることができますか?

2
Windows SIDをSQL Server server_user_sidに変換するにはどうすればよいですか?
server_user_sidをユーザー名にSUSER_SNAME変換するこの素晴らしいSQL Server関数があります。これは、よく知られたWindows SIDを(潜在的にローカライズされた)ユーザー名に変換するのに役立ちます。 例: SELECT SUSER_SNAME(0x01020000000000052000000021020000) -- yields 'BUILTIN\USERS' (or, on a German system, 'VORDEFINIERT\Benutzer') いくつかのグーグルと試行錯誤(=ユーザーを手動で作成し、sys.server_principals後で確認する)で、以下の同等性を決定しました。 Built-in User/Group Windows SID SQL Server server_user_sid BUILTIN\USERS S-1-5-32-545 0x01020000000000052000000021020000 NT AUTHORITY\SYSTEM S-1-5-18 0x010100000000000512000000 Windows SIDをSQL Server server_user_sidsに変換するアルゴリズムは何ですか?

4
SSRSと管理されたサービスアカウント-構成できませんか?
管理されたサービスアカウントを使用するようにReporting Servicesを構成しようとしています。環境は次のとおりです。 サーバー:Windows 2008 R2 SP1 Reporting Services:SQL Server 2012(バージョン11.0.6567.0) 現在、SSRSはドメインサービスアカウントとして実行されていますが、MSAとして実行するように変更したいと考えています。SQL Serverインスタンスとエージェントの両方が、MSAを使用するように正常に変更されました。 Reporting Services構成マネージャーを介してサービスアカウントをMSAに変更しようとすると、エラーが表示されます。 Microsoft.ReportingServices.WmiProvider.WMIProviderException:アカウント名が無効です。domain \ aliasの形式でアカウントを指定します。 ---> System.Runtime.InteropServices.COMException(0x8004021D):HRESULTからの例外:0x8004021D ---内部例外スタックトレースの終了--- at Microsoft.ReportingServices.WmiProvider.RSWmiAdmin.ThrowOnError(ManagementBaseObject mo)at Microsoft.ReportingServices .WmiProvider.RSWmiAdmin.SetWindowsServiceIdentity(String accountName、SecureString password、Boolean useBuiltinAccount)at ReportServicesConfigUI.WMIProvider.RSReportServerAdmin.SetWindowsServiceIdentity(String accountName、SecureString password、Boolean useBuiltinAccount) 私の質問は簡単です: 管理されたサービスアカウントを使用するようにSSRSサービスアカウントを変更した人はいますか?もしそうなら、どうですか?!

1
GETUTCDATEがSYSDATETIMEOFFSETよりも早いのはなぜですか?
あるいは、マイクロソフトはどのようにしてタイムトラベルを可能にしたのですか? このコードを考えてみましょう: DECLARE @Offset datetimeoffset = sysdatetimeoffset(); DECLARE @UTC datetime = getUTCdate(); DECLARE @UTCFromOffset datetime = CONVERT(datetime,SWITCHOFFSET(@Offset,0)); SELECT Offset = @Offset, UTC = @UTC, UTCFromOffset = @UTCFromOffset, TimeTravelPossible = CASE WHEN @UTC < @UTCFromOffset THEN 1 ELSE 0 END; @Offsetはの前 @UTCに設定されますが、後の値になることもあります。(私はSQL Server 2008 R2とSQL Server 2016でこれを試しました。疑わしい出来事をキャッチするには、数回実行する必要があります。) これは、単に丸めや精度の欠如の問題であるようには見えません。(実際、丸めは時々問題を「修正」するものだと思います。)サンプル実行の値は次のとおりです。 オフセット 2017-06-07 12:01:58.8801139 …

3
FK関係を維持しながら、ID列を含む新しいテーブルにデータを移行する方法
データベース間でデータを移行したい。テーブルスキーマはまったく同じです。 CREATE TABLE Customers( [Id] INT NOT NULL PRIMARY KEY IDENTITY, (some other columns ......) ); CREATE TABLE Orders( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [CustomerId] INT NOT NULL, (some other columns ......), CONSTRAINT [FK_Customers_Orders] FOREIGN KEY ([CustomerId]) REFERENCES [Customers]([Id]) ) 2つのデータベースには異なるデータがあるため、同じテーブルの新しいIDキーは2つのデータベースで異なります。それは問題ではない; 私の目標は、既存のデータに新しいデータを追加することであり、テーブル全体のすべてのデータを完全に置き換えることではありません。ただし、挿入されたデータのすべての親子関係を維持したいと思います。 SSMSの「スクリプトの生成」機能を使用すると、スクリプトは同じIDを使用して挿入を試み、宛先データベースの既存のデータと競合します。データベーススクリプトのみを使用してデータをコピーするにはどうすればよいですか? 宛先のID列を最後の値から通常どおりに継続させたい。 Customers他のUNIQUE NOT NULL制約はありません。他の列に重複するデータがあっても問題ありません(ここでは例として使用CustomersしOrdersているので、全体を説明する必要はありません)。問題は、1対Nの関係についてです。

1
実行プランで不足しているインデックスが表示されているがクエリが高速
実際の実行プランを見ると、クエリの所要時間が1秒未満であっても、インデックスが不足していることがわかります。 SELECT Account.AccountID, Account.Name FROM account LEFT OUTER JOIN accountfeaturesetting afs ON afs.accountid = account.accountid and afs.featureid = 'Schedules' and afs.settingid = 'EditReasons' WHERE ISNULL(afs.Value, '0') = '0' AND EXISTS (SELECT 1 FROM program WHERE program.AccountID = account.AccountID AND program.Active = 1 AND (program.ScheduleEditReasonFlags <> 0 OR program.ScheduleEditReasonFields <> 0)) …

5
ウィンドウ関数を使用したサブクエリの最適化
私のパフォーマンスチューニングのスキルを十分に感じるように見えることはありませんようがあれば、私はいつも疑問に思うより多くの私はいくつかのクエリに対して実行することができ、最適化が。この質問が関係する状況は、サブクエリ内にネストされたウィンドウ化MAX関数です。 私が調べているデータは、より大きなセットのさまざまなグループでの一連のトランザクションです。重要なフィールドは4つあります。トランザクションの一意のID、トランザクションのバッチのグループID、およびそれぞれの一意のトランザクションまたはトランザクションのグループに関連付けられた日付です。ほとんどの場合、グループの日付はバッチの最大一意のトランザクションの日付と一致しますが、システムで手動調整が行われ、グループのトランザクションの日付がキャプチャされた後に一意の日付の操作が発生する場合があります。この手動編集では、グループの日付は意図的に調整されません。 このクエリで特定するのは、一意の日付がグループの日付の後にあるレコードです。次のサンプルクエリは、私のシナリオにほぼ相当するものを構築し、SELECTステートメントは探しているレコードを返しますが、このソリューションに最も効率的な方法でアプローチしていますか?これは、ファクトテーブルの読み込み中にレコードが上位9桁の数を数えるため、実行に時間がかかりますが、ほとんどの場合、サブクエリを無視することで、ここにもっと良いアプローチがあるかどうか疑問に思います。インデックスは既に用意されていると確信しているので、インデックスについては心配していません。私が探しているのは、同じことを実現するが、さらに効率的な代替のクエリアプローチです。どんなフィードバックでも大歓迎です。 CREATE TABLE #Example ( UniqueID INT IDENTITY(1,1) , GroupID INT , GroupDate DATETIME , UniqueDate DATETIME ) CREATE CLUSTERED INDEX [CX_1] ON [#Example] ( [UniqueID] ASC ) SET NOCOUNT ON --Populate some test data DECLARE @i INT = 0, @j INT = 5, @UniqueDate DATETIME, @GroupDate DATETIME …

2
別々のデータベース間の関係は悪い習慣ですか?
複数のデータベースを持つクライアントを使用しています。レベルデータベース(アプリケーション固有のDB)masterからの関係を持ついくつかのレベルデータベースがありますinstance。fromからinstancetoへの関係masterは、のテーブルへの主キーを表す整数値ですmaster。のビューとストアドプロシージャは、これらのストアドキーを介してinstancesデータをロードするように設定masterされています。 明らかに、実際の参照整合性はありませんが、それは悪い習慣なのinstanceでしょうか、それともデータベースの読み取り専用テーブルにデータを常駐させるべきなのでしょうか。

1
奇妙な密度はサンプリングされた統計をもたらす
NCインデックスは、サンプリングとフルスキャンで推定すると、まったく異なる統計分布を取得します。サンプリングされたものは、奇妙な密度ベクトルを持っています。その結果、実行計画が不十分になります。 非クラスター化インデックスでサポートされているnull以外のFK列を含む、約2,700万行のテーブルがあります。テーブルは主キーでクラスター化されます。どちらの列もvarcharです。 FKカラムのフルスキャン統計更新により、通常の密度ベクトルが得られます。 All density Average Length Columns 6,181983E-08 45,99747 INSTANCEELEMENTID 3,615442E-08 95,26874 INSTANCEELEMENTID, ID つまり、INSTANCELEMENTID結合する個別の行ごとに約1.7行を読み取ることが期待されています。 ヒストグラムの一般的なビンは次のようになります。 RANGE_HI_KEY RANGE_ROWS EQ_ROWS DISTINCT_RANGE_ROWS AVG_RANGE_ROWS FOOBAR 133053 10 71366 1,679318 ただし、サンプルの更新を行う場合(このテーブルのデフォルトのサンプル番号は230k行です)、奇妙なことが起こります。 4,773657E-06 45,99596 INSTANCEELEMENTID 3,702179E-08 95,30183 INSTANCEELEMENTID, ID 上の密度INSTANCEELEMENTIDは2桁大きくなりました。(ただし、両方のカラムの密度はかなり許容できる値に推定されています)。 ヒストグラムの典型的なビンは次のようになります。 RANGE_HI_KEY RANGE_ROWS EQ_ROWS DISTINCT_RANGE_ROWS AVG_RANGE_ROWS FOOBAR 143870,4 766,2573 1247 115,3596 ZOTZOT 131560,7 1 …

4
「AlwaysOn」は常に「Always On」ではありませんか?
Windowsフェールオーバークラスターを作成し、SQL Serverの2つのインスタンスをSQL Serverフェールオーバークラスターのノードとして追加しました。 SQL構成マネージャーで「AlwaysOn可用性グループ」を使用するようにサーバーを設定します。 フェイルオーバーをテストするために、長いクエリをロードして実行し、次にFailover Cluster Managerを使用してアクティブノードを停止し、アクティブノードのクラスターサービスを停止しました。 クエリは接続なしで壊れ、ノードがドレインされて新しいノードが引き継ぐ前に、サーバーは約20秒間使用不可と表示されました。 私はこれを間違っていましたか?接続がほとんどまたはまったく失われないように、これをどのように構成する必要がありますか? AlwaysOnは常にオンではありませんか?

2
これがBIGINT colでシークするのに、追加の定数スキャン、計算スカラー、ネストされたループ演算子があるのはなぜですか?
一部のクエリの実際の実行計画を見ると、WHERE句で使用されているリテラル定数が、スカラー計算と定数スキャンのネストされたチェーンとして表示されていることに気づきました。 これを再現するには、次の表を使用します CREATE TABLE Table1 ( [col1] [bigint] NOT NULL, [col2] [varchar](50) NULL, [col3] [char](200) NULL ) CREATE NONCLUSTERED INDEX IX_Table1 ON Table1 (col1 ASC) その中にいくつかのデータがあります: INSERT INTO Table1(col1) VALUES (1),(2),(3), (-9223372036854775808), (9223372036854775807), (2147483647),(-2147483648) 次の(ナンセンス)クエリを実行すると: SELECT a.col1, a.col2 FROM Table1 a, Table1 b WHERE b.col1 > 2147483648 インデックスシークとスカラー計算(定数から)の結果で、ネストされたループの描画を行うことがわかります。 リテラルがmaxintよりも大きいことに注意してください。それは書くのに役立ちますCAST(2147483648 as …

3
新しく作成された列に挿入することはできません
私はこのような簡単なテストテーブルを持っています: CREATE TABLE MyTable (x INT); トランザクション内で、列を追加してから、新しく作成した列に挿入しようとしています。 BEGIN TRANSACTION; PRINT 'Adding column, ''SupplementalDividends'', to MyTable table.'; ALTER TABLE MyTable ADD SupplementalDividends DECIMAL(18,6); PRINT 'Column added successfully....'; PRINT 'Ready to INSERT into MyTable ...'; INSERT INTO MyTable (x, SupplementalDividends) VALUES (1, 3.2); PRINT '**** CHANGES COMPLETE -- COMMITTING.'; COMMIT TRANSACTION; 上記のコードを実行すると、問題はエラーメッセージになります。 …

1
フォルダー内の複数の.DTSXパッケージファイルのPackageFormatVersionを決定する
Kenneth Fisherが、私のSSISパッケージとはどのSQLバージョンであるかを判断する方法についてブログ投稿しました。2015年4月。 これにはPackageFormatVersion、XMLメタデータで見つかったSSISパッケージのどれにSQLバージョンがマップされているかのテーブルがあります。これは、1つの個別のパッケージを確認するときに役立ちます。 約100のSSIS .DTSXパッケージのフォルダーがあり、それらのSQLバージョンをすべて知る必要があります。 フォルダー(ファイルシステム)内のPackageFormatVersion複数の.DTSXパッケージの何(つまり、SQLバージョン)を一括して決定することができますか? 最終的な目標は、現在ソース管理システムが存在しないため、これらのパッケージを取得するために取得および実装する適切なTFSバージョンを決定することです。Kennethが提示する表は、この質問に答えるのに役立ちますが、最初に、SQLバージョンのパッケージを確認する必要があります。 BIDSもSSDTもインストールされていないとします。 必要な出力が次のようなものであると想定します。ここで、pipeは新しい列を指定します。 PackageFilename | PackageFormatVersion -------------------------------------- Package1.dtsx | 3 Package2.dtsx | 4 PowerShell、TSQL、ディレクトリ構造をクロールできるサードパーティツール、またはその他のツールを歓迎します。

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