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

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

2
主キーの代わりにIDを使用することをお勧めしますか?
私たちは宣言できIdentityようにid_numそれはとてもid_numユニークな番号の増分を持つことになります。 CREATE TABLE new_employees ( id_num int IDENTITY(1,1), fname varchar (20), minit char(1), lname varchar(30) ) 各行に一意の番号が提供さIdentityれているPrimary keyため、の代わりに使用することをお勧めしますIdentityか?

7
別の文字列内の文字列のすべての位置を見つける方法
patindexテーブルまたは変数ですべてのポジションを見つけるにはどうすればよいですか? declare @name nvarchar(max) set @name ='ali reza dar yek shabe barani ba yek ' + 'dokhtare khoshkel be disco raft va ali baraye' + ' 1 saat anja bud va sepas... ali...' select patindex('%ali%',@name) as pos これは戻ります1が、すべての結果が必要です。例: pos === 1 74 113

1
JOIN句でORを使用する場合の奇妙なクエリプラン-テーブル内のすべての行の定数スキャン
JOIN句でORを使用するよりも2つの結果セットのUNIONが優れている理由を示すために、サンプルクエリプランを作成しようとしています。私が書いたクエリプランには困惑しています。Users.Reputationの非クラスター化インデックスでStackOverflowデータベースを使用しています。 クエリは CREATE NONCLUSTERED INDEX IX_NC_REPUTATION ON dbo.USERS(Reputation) SELECT DISTINCT Users.Id FROM dbo.Users INNER JOIN dbo.Posts ON Users.Id = Posts.OwnerUserId OR Users.Id = Posts.LastEditorUserId WHERE Users.Reputation = 5 クエリプランはhttps://www.brentozar.com/pastetheplan/?id=BkpZU1MZEにあります。クエリの所要時間は4:37分で、26612行が返されました。 このスタイルの定数スキャンが既存のテーブルから作成されるのを見たことがありません-常に一定のスキャンがユーザーによって入力された単一の行に対して使用される場合、すべての単一の行に対して一定のスキャンが実行される理由がわかりませんたとえば、SELECT GETDATE()。なぜここで使用されるのですか?このクエリプランを読む際に、いくつかのガイダンスをいただければ幸いです。 そのORをUNIONに分割すると、同じ26612行が返される12秒で実行される標準プランが作成されます。 SELECT Users.Id FROM dbo.Users INNER JOIN dbo.Posts ON Users.Id = Posts.OwnerUserId WHERE Users.Reputation = 5 UNION SELECT Users.Id …

6
READ UNCOMMITTED分離レベルを使用するのに最適な状況
ご存じのとおり、READ UNCOMMITTEDは、ダーティリードやファントムリードなどが発生する可能性がある最低の分離レベルです。この分離レベルを使用するのに最適な時期はいつですか、どのような理由で使用されるのですか? 実は前に答えを読んでみましたが、例が少ないので完全には理解できませんでした。

1
ローカルサービスアカウントで実行されているSQL Serverからドメインユーザーが所有するSSISパッケージを実行する
SQL Serverオブジェクトの転送タスクを含むSSISパッケージを実行したいのですが。関連するサーバーは同じドメイン上にありますが、SQL Serverサービスはローカルサービスアカウントで実行されています。したがって、環境は次のようになります。 ドメイン サーバー1 ローカルアカウントで実行されているSQL Server ファイルシステム:SSISパッケージ SQL Serverエージェント:ジョブ サーバー2 ローカルアカウントで実行されているSQL Server 両方のサーバーにログオンできるようにするために、サービスアカウントとして使用するドメインアカウントを作成しました。このドメインアカウントを使用してサーバー1にログオンし、ファイルシステムからパッケージを実行すると、すべての手順が成功します。しかし、SQL Serverにジョブを追加しようとすると、次のいずれかの問題が発生します。 状況1.ジョブの所有者:ローカルアカウント。ドメインアカウントのプロキシとしてSSISステップを実行します。ジョブの所有者をローカルアカウントに設定し、ジョブをドメインアカウントのプロキシとして実行すると、ジョブ自体は正常に実行されますが、パッケージは次のようなエラーをスローします 次のエラーで実行が失敗しました:「ディレクトリ 'LocalApplicationData'は存在しません。」 このエラーは、サーバー1でドメインユーザーの管理者権限を持つログインを作成することで修正できますが、これは明らかに望ましい解決策ではありません。SQL ServerエージェントまたはDTSグループのいずれかにアカウントを追加しても機能しません。 状況2.ジョブの所有者:ドメインアカウント。ドメインアカウントのプロキシとしてSSISステップを実行します。ジョブの所有者とステップの「ユーザーとして実行」の両方をドメインアカウントに設定すると、ジョブがまったく開始されず、次のエラーが発生します。 ジョブの所有者(ドメイン\ドメインユーザー)にJob nameサーバーアクセスがあるかどうかを判別できません(理由:Windows NTグループ/ユーザー 'ドメイン\ドメインユーザー'に関する情報を取得できませんでした。エラーコード0x5。[SQLSTATE 42000](エラー15404)) 。 最後のエラーは、SQL Serverがローカルアカウントで実行されており、ドメインアカウントの権限を確認できないためだと思います。 ジョブを実行させる正しい方法は何ですか?状況2は私にはきれいに感じられますが、SQL Serverがローカルアカウントで実行されているため、不可能に思えます。状況1でも機能しますが、ドメインユーザーにSQL Serverの管理者権限を与えることはできません。 更新: @JonSeigelおよび@ Mr.Brownstone: これは、権限が不足しているために問題が発生していると考えられます。ただし、エラーは存在しない 'LocalApplicationData'(アカウントごとに生成されるフォルダーの1つ)に関するものです。パッケージを実行する資格情報を使用してサーバーにログインし(これにより、プロファイルディレクトリを作成します)、プロファイルディレクトリのアクセス許可のいくつかの組み合わせを試しました。この特定のディレクトリに対するほとんどすべてのアクセス許可を手動で付与する場合でも、上記のエラーが発生します。 さらに調査を行っているときに、http: //www.sqlservercentral.com/Forums/Topic391332-148-1.aspx#bm391441のフォーラムスレッドに遭遇しました。
10 sql-server  ssis 


2
ドキュメントのsys.dm_exec_query_stats警告の実際的な影響は何ですか?
のドキュメントにsys.dm_exec_query_statsは次のように記載されています。 サーバーで現在実行中のワークロードがある場合、sys.dm_exec_query_statsの最初のクエリで不正確な結果が生成される可能性があります。クエリを再実行することで、より正確な結果を判断できます。 私は時々、アクティブなワークロード中にそのDMVを照会し、正確な結果を好みます。上記の警告を実際に適用する方法がわかりません。DMVを常に2回クエリし、2番目の結果セットを使用する方が正確です。それは少し難しいと感じます。DMVが不正確になる可能性があることに注意して、分析に組み込むことができますか?その場合、行の欠落、古い値、一貫性のない行など、どのような不正確さが表示される可能性がありますか? sys.dm_exec_query_statsアクティブなワークロード中に使用する場合のベストプラクティスは何ですか?
10 sql-server  dmv 


1
名前列の順列と組み合わせを生成する
順列と組み合わせについて、次のサンプルデータがあります。 create table tbltest ( name varchar(50), addres varchar(100) ); insert into tbltest values('Sam Mak John','Street 1 HNo 101 USA'); insert into tbltest values('Donatella Nobatti','HNo 101 UK'); insert into tbltest values('Sam Buca','Main Road B Block UAE'); insert into tbltest values('Juan Soponatime','Hight Street CA'); insert into tbltest values('Aaron Spacemuseum','HNo A10 100 …

1
SQL Serverのすべての接続でARITHABORTをONに設定すると、どのような影響がありますか?
そのため、SQL Serverの不安定な動作は.Net SqlClientデータプロバイダーのデフォルト設定が原因であると判断しましたSET ARITHABORT OFF。そうは言っても、これを実装する最良の方法を議論するさまざまな記事を読んだことがあります。私にとっては、SQL Serverに問題があり、クエリのチューニングがアプリ全体で完全に超えていない(そして明らかにSETsp に追加しても機能しない)ため、簡単な方法が欲しいだけです。 Erland Sommarskogのこのトピックに関する素晴らしい記事では、基本的にアプリを変更SET ARITHABORT ONして接続用に発行することで安全なアプローチを取ることを提案しています。ただし、dba.stackexchange 質問からのこの回答では、Solomon Rutzkyがインスタンス全体とデータベース全体の両方のアプローチを提供しています。 これをインスタンス全体に設定すると、どのような影響がありますか?私が見ているように... SSMSにはONデフォルトでこれが設定されているONため、すべての接続に対してサーバー全体に設定しても問題はありません。結局のところ、何よりもこのSQL Serverを実行する必要があるだけです。


5
SQL Serverの同じ列での複数の外部キーの使用
SQL Serverでは、列に複数の外部キーを作成できます。異なる名前を使用するたびに、同じオブジェクトを参照する別のキーを作成できます。基本的に、すべてのキーは同じ関係を定義しています。同じ列で定義され、別のテーブルの同じ列を参照する複数の外部キーを使用する方法を知りたい。SQL Serverがそのようなことを可能にすることの利点は何ですか?

1
フロートの非決定的合計
明らかなこぶしを述べさせてください。浮動小数点型は10進数値を正確に表すことができないことを完全に理解しています。これはそれについてではありません!それにもかかわらず、浮動小数点計算は決定論的であることになっています。 これが邪魔にならないところで、今日私が観察した奇妙なケースを紹介しましょう。浮動小数点値のリストがあり、それらを合計したいと思います。 CREATE TABLE #someFloats (val float); INSERT INTO #someFloats (val) VALUES (1), (1), (1.2), (1.2), (1.2), (3), (5); SELECT STR(SUM(#someFloats.val), 30, 15) FROM #someFloats; DROP TABLE #someFloats; -- yields: -- 13.600000000000001 これまでのところ、とても良いです-ここに驚きはありません。1.2バイナリ表現で正確に表現できないことは誰でも知っているので、「不正確な」結果が予想されます。 ここで、別のテーブルを左結合すると、次の奇妙なことが起こります。 CREATE TABLE #A (a int); INSERT INTO #A (a) VALUES (1), (2); CREATE TABLE #someFloats (val …

2
WSRMを使用して最大CPU使用率を制限するSQL SERVER
SQL Serverの1つのインスタンスを実行している物理サーバーがあります。 このサーバーがCPU使用率100%で実行されていることがよくあります。 私のITチームはこれに満足しておらず、32コアのうち2コアをOS用に予約することを提案しました。 これは問題なく機能し、最大使用率のピークは90%未満になりました。さらに、さまざまなユーザーからの遅いデータ取得は報告されなくなりました。 SQLリソースガバナーの代わりに、この方法でWSRM(Windowsシステムリソースマネージャー)を使用しない理由はありますか?

1
システム正常性拡張イベントからの誤ったプロセス使用率?
私は最近、システムヘルス拡張イベントイベントファイルに格納されているデータまたはメトリックの理解に取り組んでいます。 ここで提供されているように、システムヘルスを使用してパフォーマンスメトリックのデータコレクションを実装しようとしています という名前のシステムヘルスイベントから収集されるCPU使用率、その他のプロセス使用率などのメトリックを提供するレポートがあります。 scheduler_monitor_system_health_ring_buffer_recorded SQL CPU使用率としてレポートにリストされているフィールド "process_utilization"がほとんどの場合100を超える時間である理由をいくつかのビジーサーバーで理解できません。サーバーアクティビティモニターから確認した場合でも、常に100を超えるCPUが表示されます。 私はGithubでこの問題を提起しましたが、修正または応答がないようです。 したがって、私の質問は 記録されたシステムヘルスリングバッファーを使用して、サーバーのSQL CPU使用率の正確な数値を取得するにはどうすればよいですか? レポートには、レポートごとに計算された2つ未満のフィールドのカウンターも表示されます OtherProcessUtilとしての100-System_idle-process_utilization SystemUtilとしての100-system_idle これらのOtherProcessUtilおよびSystemUtilは何のために必要/役立ちますか? また、毎回メモリ使用率が常に100と表示されています。これも正しくないようです。誰か気づいたことがありますか? Idera&sentry [私がテストしたもの]のような他のツールでは、同じサーバーのCPU使用率が100%を超えていません。同じ負荷に対して並べて比較しました。

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