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

SQL Server 2014(メジャービルドバージョン12.0.xxxx)。sql-serverにもタグを付けてください。

2
Setベースのアルゴリズム/ UDFを実装する方法
800K行38列のテーブルのすべての行に対して実行する必要があるアルゴリズムがあります。このアルゴリズムはVBAに実装されており、一部の列の値を使用して他の列を操作する一連の計算を実行します。 現在、Excel(ADO)を使用してSQLをクエリし、クライアント側カーソルでVBAを使用して、すべての行をループでアルゴリズムを適用しています。動作しますが、実行に7時間かかります。 VBAコードは非常に複雑であるため、T-SQLに再コーディングするのは非常に手間がかかります。 可能なルートとしてのCLR統合とUDFについて読みました。また、データベースに近づけるためにSSISスクリプトタスクにVBAコードを配置することも考えましたが、このタイプのパフォーマンスの問題に対する専門的な方法論が存在することは確かです。 理想的には、並列セットベースの方法で、できるだけ多くの行(すべて?)に対してアルゴリズムを実行できるようになります。 この種の問題で最高のパフォーマンスを得る方法に大きく依存するヘルプ。 -編集 コメントをありがとう、私はMS SQL 2014 Enterpriseを使用しています。詳細は次のとおりです。 このアルゴリズムは、時系列データの特性パターンを見つけます。アルゴリズム内の関数は、多項式の平滑化、ウィンドウ処理を実行し、入力基準に基づいて関心領域を見つけ、多数の値といくつかのブール結果を返します。 私の質問は、実際のアルゴリズムよりも方法論に関するものです。一度に多くの行で並列計算を実現したい場合、私のオプションは何ですか。 多くの作業が可能ですが、T-SQLへの再コード化が推奨されますが、アルゴリズム開発者はVBAで作業し、頻繁に変更されるため、T-SQLバージョンとの同期を保ち、すべてを再検証する必要があります変化する。 T-SQLはセットベースの関数を実装する唯一の方法ですか?

3
バックアップ内部-SQL Serverのロックとパフォーマンスオーバーヘッドの観点から、バックアップジョブの実行中はどうなりますか?
MySQLの場合、データベースはSQLステートメントでテーブルごとにバックアップされることを知っています。これによりロックが発生し、バックアップ中に列を更新すると、整合性の問題が発生する可能性があります。 私の理解では、これはMicrosoft SQL Serverには適用されませんが、SQL Serverはこれをどのように処理しますか?DBの一貫性を保つために内部フリーズがありますか? また、バックアップはシングルスレッドであり、単一のファイルにバックアップすることを想定して、1つのコアのみを使用することを聞きました。また、マルチコアマシン、たとえば16コア、または少なくとも1つよりもかなり大きな数のマシンがあるとします。 私の個人的な経験から、バックアップを取る際にロックやオーバーヘッドの問題はありませんでしたが、私の経験は限られています。そのため、サーバープロパティで常にバックアップの圧縮を有効にすることをお勧めします。 では、バックアップジョブの実行中はどうなりますか?また、バージョンごとに大きな違いはありますか?たとえば、2008、2012、2014(ライセンスではありません)。

3
ユーザーが属するADグループログインは何ですか?
この質問に適切なタイトルを選択したかどうかはわかりません。私が本当に望んでいるのは、個々のWindows ADユーザーが与えられた場合、このサーバーの特定のデータベースにアクセスできるWindows ADグループ(ログイン)のリストを見つけたいです 次のクエリを実行すると select name, principal_id, type, type_desc, default_schema_name, create_date, modify_date, owning_principal_id, sid, is_fixed_role from sys.database_principals 私のサーバーで Microsoft SQL Server 2008 R2(SP1)-10.50.2500.0(X64)2011年6月17日00:54:03著作権(c)Windows NT 6.1(ビルド7601:Service Pack 1)上のMicrosoft Corporation Standard Edition(64ビット) 次の結果が得られます(一部のリスト): 特定のログインが持つすべての許可を知る必要があります。このログインは、ADグループを介してサーバー/データベースにアクセスできます。 1)上記のリストから、私のログインはどのADグループに属しますか? 以下でこれを行っていますが、このユーザーが属するADグループ(上記の図に従ってこのサーバーにアクセスできる)のリストを見つけたいと思います。 まず、問題のユーザーとして実行します EXECUTE AS LOGIN='mycompany\HThorne' DECLARE @User VARCHAR(20) SELECT @USER = SUBSTRING(SUSER_SNAME(), CHARINDEX('\', SUSER_SNAME()) + 1, LEN(SUSER_SNAME())) …


4
SSISDBカタログを作成できません
SQL Server 2014統合サービスでカタログを作成しようとすると、以下のエラーが発生します。インストールや他の場所で私が見逃したものはありますか? カタログバックアップファイル 'C:\ Program Files \ Microsoft SQL Server \ 120 \ DTS \ Binn \ SSISDBBackup.bak'にアクセスできませんでした。データベースファイルが存在し、SQL Serverサービスアカウントがそれにアクセスできることを確認してください(Microsoft.SqlServer.IntegrationServices.Common.ObjectModel)

2
SQL Serverの別のテーブルの値を使用してテーブルを更新する
データベースに2つのテーブルがあります。 表1 ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 | address | birthdate | ------------------------------------------------------------------------- テーブル#2 ----------------------------------------- | gender | address | phone | birthdate | ----------------------------------------- テーブル#1の列ではaddressとphone2は空で、列の性別と生年月日の値はテーブル#2と同じです。 どのように私はテーブル#2及び更新からデータを読み取ることができますアドレスとphone2のテーブル#2からの値を持つテーブル#1でのアドレスと電話するとき、列を性別と誕生日が各行に同じですか? 例:これは表#1の一部のデータです ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 | …

3
クエリチャレンジ:行数ではなくメジャーに基づいて、均一なサイズのバケットを作成する
可能な限り均等に、一定数のトラックに注文を積むという観点から問題を説明します。 入力: @TruckCount - the number of empty trucks to fill セット: OrderId, OrderDetailId, OrderDetailSize, TruckId (initially null) Ordersは1つ以上で構成されますOrderDetails。 ここでの課題は、TruckId各レコードにを割り当てることです。 1つの注文を複数のトラックに分割することはできません。 トラックは、で測定し、可能な限り均等に*積む必要がありますsum(OrderDetailSize)。 *均等:最小積載量のトラックと最大積載量のトラック間の達成可能な最小のデルタ。この定義により、1,2,3は1,1,4よりも均等に分散されます。役立つ場合は、統計アルゴリズムになり、高さのヒストグラムも作成します。 トラックの最大積載量は考慮されていません。これらは魔法の弾力性のあるトラックです。ただし、トラックの数は固定されています。 明らかに反復的な解決策があります-ラウンドロビンは注文を割り当てます。 しかし、それはセットベースのロジックとして実行できますか? 私の主な関心は、SQL Server 2014以降です。しかし、他のプラットフォーム用のセットベースのソリューションも興味深いかもしれません。 これは、Itzik Ben-Ganの領土のように感じます:) 私の実際のアプリケーションでは、処理ワークロードを論理CPUの数に合わせて多数のバケットに分散しています。したがって、各バケットには最大サイズはありません。特に統計の更新。チャレンジを組み立てる方法として、問題をトラックに抽象化する方が楽しいと思いました。 CREATE TABLE #OrderDetail ( OrderId int NOT NULL, OrderDetailId int NOT NULL PRIMARY KEY, OrderDetailSize tinyint NOT NULL, …

1
ROW_NUMBER()OVER(PARTITION BY B、A ORDER BY C)は、(A、B、C)のインデックスを使用しません
次の2つの機能を検討してください。 ROW_NUMBER() OVER (PARTITION BY A,B ORDER BY C) ROW_NUMBER() OVER (PARTITION BY B,A ORDER BY C) 私の知る限り、まったく同じ結果が得られます。つまり、PARTITION BY句内の列をリストする順序は重要ではありません。 インデックスがある場合(A,B,C)、オプティマイザーが両方のバリアントでこのインデックスを使用することを期待しました。 しかし、驚くべきことに、オプティマイザーは2番目のバリアントで追加の明示的な並べ替えを行うことにしました。 SQL Server 2008 StandardおよびSQL Server 2014 Expressで見ました。 以下は、私がそれを再現するために使用した完全なスクリプトです。 Microsoft SQL Server 2014で試しました-12.0.2000.8(X64)2014年2月20日20:04:26 Copyright(c)Microsoft Corporation Express Edition(64-bit)on Windows NT 6.1(Build 7601:Service Pack 1) およびMicrosoft SQL Server 2014(SP1-CU7)(KB3162659)-12.0.4459.0(X64)2016年5月27日15:33:17著作権(c)Windows NT 6.1(ビルド7601:サービス上のMicrosoft Corporation …

2
条件付きINSERTおよびSELECTよりもOUTPUTを使用したMERGEの方が良いでしょうか?
多くの場合、「存在しない場合は挿入」という状況が発生します。Dan Guzmanのブログには、このプロセスをスレッドセーフにする方法に関する優れた調査があります。 文字列をから整数に単純にカタログする基本的なテーブルがありSEQUENCEます。ストアドプロシージャでは、値の整数キーが存在する場合は取得するか、値の整数キーをINSERT取得してから結果の値を取得する必要があります。dbo.NameLookup.ItemName列には一意性の制約があるため、データの整合性は危険にさらされていませんが、例外は発生しません。 それはIDENTITYそうではないので、私は得ることができず、特定の場合にSCOPE_IDENTITYは値がありますNULL。 私の状況INSERTでは、テーブルの安全性だけを扱う必要があるため、次のMERGEように使用するのがより良い方法かどうかを判断しようとしています。 SET NOCOUNT, XACT_ABORT ON; DECLARE @vValueId INT DECLARE @inserted AS TABLE (Id INT NOT NULL) MERGE dbo.NameLookup WITH (HOLDLOCK) AS f USING (SELECT @vName AS val WHERE @vName IS NOT NULL AND LEN(@vName) > 0) AS new_item ON f.ItemName= new_item.val WHEN MATCHED THEN UPDATE SET …

4
SQL Server FILESTREAMを使用する場合の(部分的な)バックアップを小さく保つ
FILESTREAMバックアップが不要な1TB近くのデータを含むデータベースがあります(データが削除された場合、数時間で自動的に再作成されるため、重要ではありません)。ほとんどのデータは数日ごとに変更されるため、差分バックアップではサイズを抑えることはできません。 私は、私はリカバリモードを設定することにより、必要な方法で作業のバックアップを持っていたFull別の作成、FILEGROUPためにFILESTREAMのみ「プライマリ」のバックアップを取って、FILEGROUP。これが原因で発生した問題は、ログファイル(バックアップされる)にFILESTREAMデータが含まれるために不必要に大きくなることでした。 SIMPLEリカバリモードは特定FILEGROUPのsのバックアップを実行する私の能力を奪うので、私もそれがオプションになるとは思わない。 私の考えは、FILESTREAMデータを別のデータベースに移動するだけですが、今では参照整合性を失い、他の多くの問題も確実に継承しています。 Simpleリカバリモードで部分的なバックアップを作成する方法はありますか(FILESTREAMテーブルを読み取り専用に設定せずに)?そうでない場合、私の問題に対する他の健全な解決策はありますか?

1
SQL Serverは、テーブルのIDENTITY VALUEを物理的にどこに保存しますか?
誰かが私にこの方向を正しい方向に向けてくれることを望んでいます。これが私のこれまでの成果です。 SELECT * FROM sys.identity_columns"last_value"を与えるシステムビューですが、そのビューの定義は内部関数を使用しますIdentityProperty(colName, 'LastValue')-したがって、それは行き止まりです(そこでシステムテーブルからプルしません)。 インターネットのどこでも(私が見た)DBCC IDENT_...コマンドを使用して値を明らかにすることを提案していますが、それでも実際に保存されている場所については暗闇の中に残ります。 そこで、DBCC PAGE(TestDB,1,1325,3)テストハーネスデータベースに対して個々のページを検索し、RESEEDコマンドを使用して値10と12の間で再シードすることにしました。 これを行うには、私は上の進値に気づいたIAM: Header、IAM: Single Page AllocationsとIAM: Extent Alloc Status Slot 1すべてが変わりました。(また、bUse1の値は、それ自体で徐々に変化しますが、とにかく定期的に変化することに気付きました)。 だからもう一つの行き止まりと私はすべてのアイデアからです。他にどこで検索できますか? 私はSQL Server 2014を実行しています。内部知識に対する飽くなき渇望がありますが、これほど理解しにくいものはまだありません。理論的には(絶対値)がどこかに保存され、(ほぼ間違いなく)位置を特定できるはずなので、私の注意を引きました。内部的に保存されたデータ/メタデータの場所を発見する私の探求において、この特定の値は私が特にとらえどころのないものとして私を打つ。私は誰かが一緒に来て私に言うことを推測/望んでいます、あなたはそれを手に入れることができますがDBCC PAGE、間違った場所を見ていました。

1
UNPIVOT(ループ結合)でバッチモードを使用する方法は?
次の形式のクエリがあります。 SELECT ... FROM ColumnstoreTable cs CROSS APPLY ( SELECT * FROM (VALUES ('A', cs.DataA) , ('B', cs.DataB) , ('C', cs.DataC) ) x(Col0, Col1) ) someValues これは、Columnstore-backedサブクエリ(ColumnstoreTable)からすべての行を取得し、それらの行を乗算します。これは本質的にUNPIVOTです。実際のクエリはこれよりも大きくなります。クエリのこの部分は、他の処理に送られます。 ここでの問題は、これCROSS APPLYが合理的な選択であるループ結合として実装されていることです。残念ながら、ループ結合はバッチモードをサポートしていません。 クエリのこの部分はパフォーマンスが非常に重要であり、バッチモードで実行するとパフォーマンスに非常に有益であると思われます。 バッチモードから移行しないように、このクエリを書き換えるにはどうすればよいですか? の代わりに一時テーブルを使用してみましたVALUESが、ハッシュ結合に等価結合条件がないという事実は変わりませんでした。

4
データベースの復元ウィザードがSSMS 2014で開かない
Windows Server 2012 R2を実行している開発マシンで、SQL Serverを2012から2014にアップグレードしました。 SQL Server Management Studio 2014を使用すると、データベースを右クリックしてTasks -> Restore -> Database...も何も実行されません。データベースの復元ウィザードが期待どおりに表示されません。 イベントビューアーにはエラーやクラッシュはありません。カーソルは砂時計にもなりません。 T-SQLを使用した復元は正常に機能し、戻ってSSMS 2012を使用すると正常に機能します。SSMS 2014でウィザードを機能させる方法についてのアイデアはありますか? SSMSの両方のバージョンのSQL Serverの同じインスタンスに接続していますが、管理者としてSSMSを実行しようとしました。 Service Pack 1です。 Microsoft SQL Server Management Studio 12.0.4100.1 Microsoft Analysis Services Client Tools 12.0.4100.1 Microsoft Data Access Components (MDAC) 6.3.9600.17415 Microsoft MSXML 3.0 5.0 6.0 Microsoft Internet Explorer 9.11.9600.18125 …

2
24時間年中無休のマルチユーザー環境でのSQL Server 2014スキーマの変更
24時間365日利用可能なデータベースを実行するために、SQL Server 2014 Enterpriseがインストールされています。私たちのデータベースは十分に大きい(200GB +)。また、新しいデータを読み取り、更新、または挿入するためにデータベースに毎分アクセスする多くのサービスがあります。クライアントに「ホット」再デプロイ機能を提供し、日々の更新(.netおよびスキーマの更新)をクライアントに対して透過的にしたいと考えています。アプリのバイナリを更新するロードバランサーを備えたクラスターに基づいたソリューションを見つけましたが、データベースの更新展開プロセスとこの問題を解決するためのベストプラクティスについては、まだいくつかの誤解があります。 スキーマの変更については、1つのサーバーを停止し、スキーマの変更を適用し、それを再起動してから、同じ変更を2番目のインスタンスに適用します。SQL Serverツールで実現できますか?これは一般的なアプローチですか?サーバーのバックアップ後のデータの同期方法 または、私は完全に間違った方向に考えていますか?より良い解決策はありますか? 一般的なスキーマの変更:列の追加/削除、ストアドプロシージャの追加/削除

2
SQL Server 2014(Windows 2012R2)でのCLRのクラッシュ
列内の文字列に対してRegEX関数を実行するこの小さなCLRがあります。 Windows Server 2012R2上のSQL Server 2014(12.0.2000)で実行すると、プロセスがクラッシュします メッセージ0、レベル11、状態0、行0現在のコマンドで重大なエラーが発生しました。結果があれば、破棄する必要があります。 スタックダンプを提供します select count (*) from table where (CLRREGEX,'Regex') しかし、私がするとき select * from table where (CLRREGEX,'Regex') 行を返します。 Windows 8.1で実行されている同じSQL Serverビルドで完全に動作します。 何か案は? -編集それはできる限り簡単です using System; using System.Collections.Generic; using System.Text; using System.Data.SqlTypes; //SqlString, SqlInt32, SqlBoolean using System.Text.RegularExpressions; //Match, Regex using Microsoft.SqlServer.Server; //SqlFunctionAttribute public partial class UserDefinedFunctions …

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