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

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



3
NULLを含むことができる列の比較-よりエレガントな方法はありますか?
次のコードのようなものを追加しないと、値をNULLと比較して結果を期待できないことを知っています... SELECT * FROM A INNER JOIN B ON A.ID = B.ID WHERE A.STRING <> B.STRING OR (A.STRING IS NULL AND B.STRING IS NOT NULL) OR (A.STRING IS NOT NULL AND B.STRING IS NULL) OR A.DT <> B.DT OR (A.DT IS NULL AND B.DT IS NOT NULL) OR (A.DT IS …
16 sql-server  null 

2
2つのセッションで同じ名前の#tempテーブルを作成できますか?
一時テーブル(#myTable)を作成し、カーソルを使用しています。これは、同時ユーザーがアプリケーションを介してカーソルにアクセスしているときに問題を引き起こしますか?同じ名前の個別の一時テーブルを作成できますか? サンプルコードは次のとおりです。 Open cursor; Fetch Next from cursor into @Variable_Temp_Table_Name; Create table #myTable(pk int) While @@Fetch_Status = 0 Begin Fetch Next from cursor into @Variable_Temp_Table_Name; End

4
SQL Serverの2つのデータベースの同期
2つのSQL Serverデータベースがあります。1つはクライアント(Windowsアプリケーション)で、もう1つはサーバー上にあります。これらの2つのデータベースを頻繁に(たとえば2分ごとに)同期したいです。 レプリケーション、タイムスタンプ、トリガーを使用したログテーブル、Microsoft Sync Frameworkなど、さまざまな同期方法について読みました。 実際、ブラックボックス(レプリケーションなど)になる可能性のある同期方法を使用するのは好きではありません。SQLServer固有のテーブルを更新し、サーバーと同期している間はブロックされないようにするためです。 そのような状況でどの方法を使用すべきだと思いますか?数分ごとに、いくつかのテーブル変更をクライアントからサーバーに送信し、サーバーから2つのテーブル変更もフェッチする必要があることに注意してください。 私は奇妙だが新しいメソッドを見つけました。クライアントで実行されたすべての(特定の優先)ストアドプロシージャをログに記録し、.sqlファイル内のパラメーターと共にサーバーに送信し、そこで実行することは可能ですか?同じことがサーバーで発生し、クライアントに送信されます。これはシンプルだが便利な方法だと思いますか? 可能であれば、便利なアプローチを提案してください。どうもありがとうございます。 編集:これはリアルタイムの同期であり、これが特別なものになることを忘れないでください。つまり、クライアントユーザーがテーブルを使用している場合、サーバーとの同期プロセスは数分ごとに行われる必要があるため、テーブルをロックする必要はありません。

6
ジョブ開始時刻を指定してSQL Serverで実行中のジョブを確認するスクリプト
Job Start Timeを使用してSQL Serverで実行中のジョブを表示するスクリプトを作成する方法 SELECT sj.name, sja.run_requested_date, CONVERT(VARCHAR(12), sja.stop_execution_date-sja.start_execution_date, 114) Duration FROM msdb.dbo.sysjobactivity sja INNER JOIN msdb.dbo.sysjobs sj ON sja.job_id = sj.job_id WHERE sja.run_requested_date IS NOT NULL ORDER BY sja.run_requested_date desc;

7
DTSインポート/エクスポートウィザードを使用してデータをインポートするときにFK制約を処理するにはどうすればよいですか?
SQL Serverのインポートおよびエクスポートウィザードを使用して、運用データベースから開発データベースにデータをコピーしようとしていますが、「INSERTステートメントがFOREIGN KEY制約と競合しています」というエラーで失敗します。 FK制約の場合、ドロップ制約を追加する/ constratスクリプトを追加することなく、これに対処する簡単な方法はありますか? 編集:私はちょうど私が実行しているものであるSQL ServerのWeb版では、DTSはあなたがパッケージを保存することはできませんことがわかりました。

1
オペレーターがtempdbを使用して、実行中に流出レベル2でデータを流出させました
警告Operator usedtempdbを使用して、クエリプランでの並べ替え操作のコストを最小限に抑えるのに苦労していますto spill data during execution with spill level 2 流出レベル1で実行中に流出データに関連するいくつかの投稿を見つけましたが、レベル2ではありません。レベル1は古い統計に起因しているようですが、レベル2はどうですか?に関連するものは見つかりませんでしたlevel 2。 この記事はソート警告に関連して非常に興味深いものでした。 SQL Serverで並べ替え警告を無視しない 私のSQLサーバー? Microsoft SQL Server 2014(SP2)(KB3171021)-12.0.5000.0(X64)2016年6月17日19:14:09 Copyright(c)Microsoft Corporation Enterprise Edition(64ビット)on Windows NT 6.3(Build 9600:)(Hypervisor) 私のハードウェア? ハーウェアを見つけるために以下のクエリを実行します: -SQL Server 2012のハードウェア情報 SELECT cpu_count AS [Logical CPU Count], hyperthread_ratio AS [Hyperthread Ratio], cpu_count/hyperthread_ratio AS [Physical CPU Count], physical_memory_kb/1024 AS …

1
マルチテナントSQL Serverデータベースの複合主キー
ASP Web API、Entity Framework、およびSQL Server / Azureデータベースを使用して、マルチテナントアプリ(単一データベース、単一スキーマ)を構築しています。このアプリは、1000〜5000人の顧客が使用します。すべてのテーブルにはTenantId(Guid / UNIQUEIDENTIFIER)フィールドがあります。現在、私はId(Guid)という単一フィールドの主キーを使用しています。しかし、Idフィールドのみを使用することで、ユーザーから提供されたデータが正しいテナントからのものであるかどうかを確認する必要があります。たとえばSalesOrder、CustomerIdフィールドを持つテーブルがあります。ユーザーが販売注文を投稿/更新するたびにCustomerId、同じテナントからのものかどうかを確認する必要があります。各テナントに複数のコンセントがあるため、状況はさらに悪化します。次に、確認する必要がTenantIdありOutletIdます。これは本当にメンテナンスの悪夢であり、パフォーマンスに悪影響を及ぼします。 TenantIdとともに主キーに追加することを考えていIdます。また、おそらく追加OutletIdします。だから、主キーSalesOrder:テーブルになりますId、TenantIdとOutletId。このアプローチの欠点は何ですか?複合キーを使用すると、パフォーマンスが大幅に低下しますか?複合キーの順序は重要ですか?私の問題に対するより良い解決策はありますか?

3
パフォーマンスを低下させるKey Lookup(クラスター化)オペレーターを排除
実行計画でキー検索(クラスター化)演算子を削除するにはどうすればよいですか? テーブルにはtblQuotes既にクラスター化インデックス(QuoteID)と27個の非クラスター化インデックスがあるため、これ以上作成しないようにしています。 私QuoteIDはクエリにクラスター化インデックス列を入れて、それが役立つことを願っていますが、残念ながらまだ同じです。 実行計画はこちら。 またはそれを見る: これは、キールックアップオペレーターによるものです。 クエリ: declare @EffDateFrom datetime ='2017-02-01', @EffDateTo datetime ='2017-08-28' SET NOCOUNT ON SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED IF OBJECT_ID('tempdb..#Data') IS NOT NULL DROP TABLE #Data CREATE TABLE #Data ( QuoteID int NOT NULL, --clustered index [EffectiveDate] [datetime] NULL, --not indexed [Submitted] [int] NULL, [Quoted] …

2
証明書チェーンは信頼されていない機関によって発行されました
少し前に、Windows 10 Home Edition環境(正確にはラップトップ)にSQL Server 2016 Developer Editionをインストールしましたが、すべて問題ありませんでした。 その後、誰か-ボックスの管理者-私に言わずに、ボックスの名前を変更することにしました。 その後、SQLサーバーに接続しようとすると、次のエラーメッセージが表示されます。 これはこれと非常によく似た質問です。 AzureのWebサイトからVMロールのDBに接続すると、「証明書チェーンは信頼されていない機関によって発行されました」 私もここにいます: ターゲットプリンシパル名が正しくありません。SSPIコンテキストを生成できません。(Microsoft SQL Server、エラー:0) Kerberos Configuration Managerを使用していて、別のエラーメッセージが表示される SQLサーバー認証でこのSQLサーバーのインスタンスに接続できますが、 Windows認証を使用して接続したいと言っておく必要があります。 明確にするために-これはすべてローカルマシンであり、どのドメインにも属していません。 ここから先に進む方法がよくわからないので、Windows認証を使用します。 証明書に関連するエラーメッセージにより、ここで証明書を再発行することについて考えさせられます。これを行う方法について、またはこれがこの状況を回避するための有効な方法であるかどうか、私にはわかりません。 私はその日はこのマシンの周りにいませんが、できるだけ早く追いつきます。時間が許せば研究を続けます。

1
SQL Server-ストアドプロシージャとプランキャッシュのIfロジック
SQL Server 2012および2016 Standard: if-elseパラメータの値に応じて、コードの2つのブランチのいずれかを実行するためにロジックをストアドプロシージャに配置すると、エンジンは最新バージョンをキャッシュしますか? また、次の実行時にパラメーターの値が変更された場合、コードの別のブランチを実行する必要があるため、ストアドプロシージャを再コンパイルおよび再キャッシュしますか?(このクエリはコンパイルに非常にコストがかかります。)

1
このクエリを実行するには、リソースプール 'internal'にシステムメモリが不足しています
運用サーバーの1つがログのエラーを報告しています エラー:701、重大度:17、状態:123。 このクエリを実行するには、リソースプール '内部'にシステムメモリが不足しています。 このエラーを検索しましたが、バグであり、Service Pack 2にホットフィックスがあります。これらはサーバーの詳細です。 Microsoft SQL Server 2008 R2(SP2)-10.50.4000.0 Standard Edition(64ビット) プロセッサー数:24(2つのNUMAノード、それぞれ12コア) メモリ:24 GB RAMがSQL Serverに割り当てられています。 クエリバッチロード/分:5000以上 私の質問は なぜこのエラーが発生するのですか? それは深刻な問題ですか? どうすれば解決できますか? メモリステータスの編集: MEMORYBROKER_FOR_RESERVE (internal) Pages ---------------------------------------- ---------- Allocations 200362 Rate 4510 Target Allocations 200362 Future Allocations 588626 Overall 2521497 Last Notification 0 MEMORYBROKER_FOR_STEAL (internal) Pages ---------------------------------------- ---------- …

4
破損ページ検出とチェックサムがSQL Serverに導入されたのはいつですか?アップグレードの動作は何ですか?
最新のSQL Serverには、ページ検証用の2つの異なるオプションがあります。されているページの検出破れやチェックサムを。もちろん、オプションもありません。 私は信じているチェックサムが、 SQL Server 2005およびそのアップグレードで導入されたか、以前のバージョンからDBを復元する方法を確認し、その前のページを維持するであろう。つまり、暗黙的なアップグレードはありませんでした。 関係する問題は、SQL Server 2000を使用して運用環境に移行し、その後SQL Server 2008 R2サーバーに移行した運用データベースがあることです。破損ページの検出であると予想していたときに、ページ検証がなしに設定されました。この時間をさかのぼると、DBは元々SQL Server 7.0で開発され、その後SQL Server 2000に移行されたと思われるため、観察された結果を説明できます。 Torn Page Detection and ChecksumがSQL Serverの機能になった時期と、新しいバージョンに移行またはアップグレードされたときの動作について疑問に思いました。 編集:いくつかの答えをまとめる: Torn Page DetectionがSQL Serverに導入された日付には、若干の不一致があります。 リンク1:http : //support.microsoft.com/kb/230785リンク2:http : //technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx 最初のリンクはSQL 7.0を示し、2番目のリンクはSQL2000を示します。私はSQL7.0の提案を信頼する傾向があり、リンク2は、SQL7.0ではデフォルトでオフになり、SQL2000ではデフォルトでオンになるということで混乱していました。
15 sql-server 

1
オプティマイザーがさまざまな種類のスプールを選択する際に、どのコスト要因が影響しますか?
スプールム SQL Serverには、いくつかの種類のスプールがあります。私が興味を持っている2つはTable SpoolとIndexスプールで、修正クエリの外です。 読み取り専用クエリ、特にネストループ結合の内側では、テーブルスプールまたはインデックススプールのいずれかを使用して、I / Oを削減し、クエリのパフォーマンスを向上させることができます。これらのスプールは、EagerまたはLazyです。あなたと私のように。 私の質問は: どの要素がテーブルとインデックススプールの選択に影響するか イーガースプールとレイジースプールのどちらを選択するか

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