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

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

4
FOR XMLには文字(0x0000)が含まれているため、データをシリアル化できませんでした
大きなクエリがあり(必要に応じてここに投稿します)、このエラーが表示されます。 メッセージ6841、レベル16、状態1、行1の XMLは、XMLで許可されていない文字(0x0000)を含むため、ノード 'NoName'のデータをシリアル化できませんでした。FOR XMLを使用してこのデータを取得するには、バイナリ、varbinary、またはimageデータ型に変換し、BINARY BASE64ディレクティブを使用します。 私が使用する唯一の部分FOR XMLはここにあります: WHERE (CodFuncionario = Results.CodFuncionario) FOR XML PATH(''), TYPE).value('(./text())[1]', 'VARCHAR(MAX)'), 1, 2, '') AS [Experiencia] しかし、何node nonameですか?そして、どのようにこの値を探すことができますか:(0x0000) これはサブクエリの1つです(FOR XMLを持っている唯一の部分)。 SELECT [CodFuncionario], STUFF ( ( SELECT ' / ' + CAST ( [DescFuncao] + '-' + [DescTempoExperiencia] AS VARCHAR(MAX) )... FROM [Linked_Server].db.dbo.tblFuncionarioExperiencia T0 INNER …

12
SQL Serverの各文の各単語の最初の文字のみを大文字にする
SQL列の各文の各単語の最初の文字のみを大文字にします。 たとえば、文が次の場合: '私は映画が好き' 次に出力が必要です: '私は映画が好き' クエリ: declare @a varchar(15) set @a = 'qWeRtY kEyBoArD' select @a as [Normal text], upper(@a) as [Uppercase text], lower(@a) as [Lowercase text], upper(left(@a,1)) + lower(substring(@a,2,len(@a))) as [Capitalize first letter only] ここでは、自分の列でのみ最初の文字を大文字、小文字、大文字にしました(ここではランダムな単語を入力しています)。 私の結果は次のとおりです。 それを行う可能性はありますか? ユーザー定義関数を使用せずに結果を取得する可能性はありますか? 出力が必要です Qwerty Keyboard

3
クラスター化された列ストアインデックスと外部キー
インデックスを使用してデータウェアハウスのパフォーマンスをチューニングしています。私はSQL Server 2014を初めて使用します。Microsoftは次のように説明しています。 「クラスター化された列ストアインデックスは、大規模なデータウェアハウジングファクトテーブルを格納するための標準であり、ほとんどのデータウェアハウジングシナリオで使用されることを期待しています。操作を削除します。」 http://msdn.microsoft.com/en-us/library/gg492088.aspx ただし、ドキュメントをさらに読むと、制限と制限があります。 「一意の制約、主キーの制約、または外部キーの制約を持つことはできません。」 これは私をとても混乱させます!さまざまな理由(データの整合性、セマンティックレイヤーに表示される関係など)のために、データウェアハウスに外部キーを配置することをお勧めします(必須ではありません)。 そのため、Microsoftはデータウェアハウスシナリオのクラスター化列ストアインデックスを推奨しています。ただし、外部キー関係を処理できませんか?! これは正しいですか?他にどのアプローチをお勧めしますか?過去には、データウェアハウスのシナリオで、クラスター化されていない列ストアインデックスを使用して、データロードのドロップと再構築を行いました。しかし、SQL Server 2014はデータウェアハウスに新しい価値を追加しませんか?

2
クエリプランの作成コストを測定または検索する方法
パラメータスニッフィングにより、「悪い」実行プランがプランキャッシュに到達し、その後のストアドプロシージャの実行が非常に遅くなる典型的なケースがあります。ローカル変数でこの問題を「解決」できますが、OPTIMIZE FOR ... UNKNOWN、およびでOPTION(RECOMPILE)。ただし、クエリに飛び込んで最適化を試みることもできます。 私がすべきかどうかを判断しようとしています:問題を修正する時間が限られているので、それをしないことのコストを知りたいです。ご覧のとおり、単にに固執するOPTION(RECOMPILE)と、最終的な効果は、クエリが実行されるたびにクエリプランが再作成されることです。だから、私は知る必要があると思う: クエリプランを作成するためのコストを調べる方法 私自身の質問に答えるために、(このクエリで)Googled を使い、dm_exec_query_statsDMVの列のドキュメントを 調べました。この情報を見つけるために、「実際のクエリプラン」のSSMSの出力ウィンドウも調べました。最後に、DBA.SEを検索しました。それらのどれも答えを導きませんでした。 誰か教えてもらえますか?計画の作成に必要な時間を見つけたり測定したりすることは可能ですか?

1
表の変更中に「許容される最大行サイズ8060より大きいサイズ8074の行を作成できません」
テーブルの列を変更しようとしています。既存のテーブルは次のとおりです。 CREATE TABLE [dbo].[table]( [id1] [int] NOT NULL, [id2] [int] NOT NULL, [id3] [int] NOT NULL, [name] [nvarchar](255) NOT NULL, [id4] [int] NOT NULL, [xmlData] [xml](CONTENT [dbo].[xml_schema]) NULL, [booleanData1] [bit] NOT NULL, [notes] [varchar](4096) NULL, [id5] [int] NULL, [booleanData2] [bit] NULL, [id6] [int] NULL, CONSTRAINT [PK_table] PRIMARY KEY CLUSTERED ([id1] …

7
毎日のスケジュールを[開始日]にグループ化します。終了日]曜日のリストとの間隔
2つのシステム間でデータを変換する必要があります。 最初のシステムは、スケジュールを日付の単純なリストとして保存します。スケジュールに含まれる各日付は1行です。日付のシーケンスにはさまざまなギャップが存在する可能性があります(週末、祝日、長い一時停止、曜日によってはスケジュールから除外される場合があります)。週末も含めて、隙間はまったくありません。スケジュールは最大2年です。通常は数週間です。 次に、週末を除く2週間にわたるスケジュールの簡単な例を示します(以下のスクリプトにはさらに複雑な例があります)。 +----+------------+------------+---------+--------+ | ID | ContractID | dt | dowChar | dowInt | +----+------------+------------+---------+--------+ | 10 | 1 | 2016-05-02 | Mon | 2 | | 11 | 1 | 2016-05-03 | Tue | 3 | | 12 | 1 | 2016-05-04 | Wed | 4 | | …

2
数百万行にわたるカスタマイズ可能な並べ替えによるページングパフォーマンス
このアプリケーションには、ユーザーが多数のレコード(1000万から2000万)をページングできるグリッドがあります。グリッドは、多数の列(20以上)での昇順と降順の並べ替えをサポートしています。値の多くも一意ではないため、アプリケーションはidブレイクとしてidでソートして、行が常に同じページに表示されるようにします。例として、ユーザーがウィジェットサイズ(最大から開始)でソートする場合、アプリケーションは次のようなクエリを生成します。 SELECT TOP 30 * -- (Pretend that there is a list of columns here) FROM Test -- WHERE widgetSize > 100 ORDER BY widgetSize DESC, id ASC このクエリは(キャッシュデータを使用して)実行に約15秒かかります。主なコストは、widgetSizeで約130万行をソートすることです。このクエリを調整しようとしてWHERE、最大のWidgetSizesに制限された句を追加すると(上記のクエリでコメントアウトされている)、クエリはわずか〜800msかかることを発見しました(上位50,000の結果はすべてウィジェットサイズ> 100です) 。 WHERE句のないクエリが非常に遅いのはなぜですか?widgetSize列の統計情報を確認したところ、上位739行のWidgetSize> 506が示されています。30行しか必要ないため、SQLサーバーはこの情報を使用してウィジェットサイズの行のみを並べ替える必要があることを推測できませんどっちが大きい? 私はこのことができますことを知っている特定の上のインデックスに追加することにより、迅速に実行したクエリwidgetSizeとはid、しかし、このインデックスは、この特定のシナリオでのみ有用であり、(例えば)ユーザがソート方向を反転させる場合は無価値になります。このテーブルには多くの追加の列が含まれており、各インデックスは大きいため(〜200 MB)、すべての可能な並べ替え順序にインデックスを追加する余裕はありません。 すべての可能な並べ替え順序にインデックスを追加せずにこれらのクエリクエリを実行する方法はありますか?(ユーザーは20以上の列のいずれかでソートできます) 次のスクリプトは、上記のテーブルを作成し、代表的なデータを入力します。テーブルは実際のテーブルよりもはるかに狭いですが、私が見ているパフォーマンスを示しています。私のPCでは、where句のあるクエリは200ミリ秒かかりますが、where caluseのないクエリは800ミリ秒かかります。 警告:このスクリプトの実行後の結果のデータベースのサイズは最大2Gbです。 CREATE TABLE Test ( id INT NOT NULL IDENTITY(1,1) PRIMARY KEY, …

4
メモリ最適化テーブル-メンテナンスが本当に難しいのでしょうか?
私は、MS SQL 2012から2014へのアップグレードの利点を調査しています。SQL2014の大きなセールスポイントの1つは、クエリを超高速にするメモリ最適化テーブルです。 メモリ最適化テーブルには、次のようないくつかの制限があることがわかりました。 いいえ(max)サイズのフィールドありません 行ごとに最大1 KB timestampフィールドなし 計算列はありません UNIQUE制約なし これらはすべて迷惑と見なされますが、パフォーマンス上のメリットを得るために本当に回避したい場合は、計画を立てることができます。 実際のキッカーは、ALTER TABLEステートメントを実行できないという事実であり、インデックスのリストにフィールドを追加するたびに、このリマロールを実行する必要がINCLUDEあります。さらに、ライブDBのMOテーブルにスキーマを変更するには、ユーザーをシステムから締め出す必要があるようです。 マイクロソフトがこの機能にこれほど多くの開発資金を投資したとは信じられないほど、これはまったくとんでもないことであり、維持するのは非常に実用的ではありません。これは、私がスティックの間違った終わりを得たに違いないという結論に私を導きます。メモリを最適化したテーブルについて誤解していたため、実際よりも保守がはるかに困難であると思われました。 それで、私は何を誤解しましたか?MOテーブルを使用しましたか?それらを使用および保守するのに実用的な何らかの種類の秘密のスイッチまたはプロセスがありますか?


3
多くの結合を持つSQLクエリを小さな結合に分割すると役立ちますか?
SQL Server 2008 R2で毎晩レポートを作成する必要があります。レポートの計算には数時間かかります。時間を短縮するために、テーブルを事前計算します。このテーブルは、12の非常に大きな(数百万行)テーブルを結合して作成されます。 この集計テーブルの計算には、数日前までに約4時間かかりました。DBAは、この大きな結合を3つの小さな結合(それぞれ4つのテーブルに結合)に分割しました。一時的な結果は毎回一時テーブルに保存され、次の結合で使用されます。 DBA拡張の結果、集計テーブルは15分で計算されます。私はそれがどのように可能か疑問に思いました。DBAは、サーバーが処理しなければならないデータの数が少ないためだと言いました。言い換えれば、大きな元の結合では、サーバーは合計された小さな結合よりも多くのデータを処理する必要があります。ただし、元の大きな結合でオプティマイザが効率的に処理し、結合をそれ自体で分割し、次の結合に必要な数の列のみを送信すると仮定します。 彼が行ったもう1つのことは、一時テーブルの1つにインデックスを作成したことです。ただし、オプティマイザーは必要に応じて適切なハッシュテーブルを作成し、計算を全体的に最適化すると思います。 私はこれについてDBAと話しましたが、彼は処理時間の改善がどのように行われたのかについては不確かでした。彼は、そのようなビッグデータを計算するのは圧倒される可能性があり、最適化プログラムが最適な実行計画を予測するのに苦労する可能性があるため、サーバーを非難しないと述べました。これは理解していますが、正確な理由についてより明確な答えが欲しいです。 したがって、質問は次のとおりです。 大きな改善をもたらす可能性があるものは何ですか? 大きな結合を小さな結合に分割する標準的な手順ですか? 複数の小さな結合の場合、サーバーが処理する必要があるデータの量は本当に少ないですか? 元のクエリは次のとおりです。 Insert Into FinalResult_Base SELECT TC.TestCampaignContainerId, TC.CategoryId As TestCampaignCategoryId, TC.Grade, TC.TestCampaignId, T.TestSetId ,TL.TestId ,TSK.CategoryId ,TT.[TestletId] ,TL.SectionNo ,TL.Difficulty ,TestletName = Char(65+TL.SectionNo) + CONVERT(varchar(4),6 - TL.Difficulty) ,TQ.[QuestionId] ,TS.StudentId ,TS.ClassId ,RA.SubjectId ,TQ.[QuestionPoints] ,GoodAnswer = Case When TQ.[QuestionPoints] Is null Then 0 …

6
ストアドプロシージャにトランザクションを使用しないでください
いくつかのコマンドを実行するストアドプロシージャがあります。これらのコマンドがストアドプロシージャのトランザクションにラップされないようにします。4番目のコマンドが失敗した場合、1番目、2番目、および3番目のコマンドをロールバックではなく、そのままにしておきます。 すべてが1つの大きなトランザクションとして実行されないような方法でストアドプロシージャを記述することは可能ですか?

1
mdfファイルとldfファイルのシャドウボリュームバックアップに依存しても安全ですか?
従来のSQLサーバーのバックアップを、mdfおよびldfファイルのVSSベースのバックアップに置き換えることを検討しています。dbの人として、私はこれについていくらか動揺していますが、これが機能しないという証拠は見つかりませんか? この戦略でトランザクションを失う可能性のある場所を実証するためにセットアップできる試用版を誰でも提案できますか?[長時間のトランザクション中に電源コードを抜くことは問題ありません]。 私たちが見ているシステムは、mdfファイルとldfファイルの初期スナップショットを作成してから、変更全体をコピーします。失敗するシナリオは想像できません。 従来のバックアップを保持する必要があることを上司に納得させてください。
18 sql-server 

4
パフォーマンスに影響を与えずに大規模なSQL Serverデータベースをバックアップするにはどうすればよいですか?
クエリの実行が遅い、または早朝にタイムアウトになるというレポートがありましたが、これに影響を与えると思われる実行中のジョブは、データベースのバックアップジョブだけです。 データベース自体は約300 GBで、バックアップジョブは午前4時30分に開始され、午前7時過ぎまで終了しません。バックアップジョブの現在の構文は次のとおりです。 BACKUP DATABASE [DatabaseName] TO DISK = N'E:\Database Backups\DatabaseName.Bak' WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak', NOSKIP, STATS = 10, NOFORMAT E:\ データベースとデータベースバックアップの両方を保持するサーバー上のパーティションです。 また、これは専用のスタンドアロンサーバーではなく、仮想サーバーであることにも注意してください。仮想サーバーに切り替えた直後に、バックアッププロセス中に速度低下に関する苦情が寄せられるようになったので、関連があると思います。 このバックアップジョブを実行して、実行中のクエリのパフォーマンスに影響を与えない方法はありますか? SQL Server 2005を使用しています

3
クライアントからSQL Serverへの接続を確認する簡単な方法
トラブルシューティングの目的で、SQL Serverに接続できない可能性のあるアプリケーションとは無関係に、クライアントがSQL Serverインスタンスに接続できるかどうかを確認したいと思います。 デフォルトのWindowsシステムツールを使用してこれを行う簡単な方法(つまり、サードパーティのソフトウェアをインストールする必要はありません)はありますか?おそらくスクリプトまたはネットワークアプリケーションを使用していますか?

3
SQLサーバーからの高ディスクI / Oまたは高ディスクI / OがSQLサーバーを遅くしていますか?
SQLサーバーのパフォーマンスの問題について、DBAと2人のハードウェア担当者と議論してきました。通常はすべて問題ありませんが、過去数週間にわたって、SQLサーバーで大きなラグスパイクが発生しています。SQL ServerがディスクI / Oで待機していることは明らかです。しかし、SQL Serverが異常に高いI / Oを要求しているためだと言われ続けています。そうではありません。実行しているものから、通常のことは何もありません。DBAが注意を払うのは、ブロッキングなどを引き起こしているものだけで、これは役に立ちません。たとえば、バックアップの主なものは、ASPStateデータベースの操作です。これは、WebサーバーでASPセッション状態を管理するために使用しています。これらの操作は通常、Sp_who2のアクティブな結果には表示されません。これは、これらの操作が非常に高速に発生するためです。データベースは単純復旧モードであり、ロギングは最小限です。ただし、これらのラグスパイクの間、ブロックまたは待機中のデータベースに対する多くの選択および更新操作を確認できます。何が起こっているのかは、そのデータベースのログとデータファイルに使用されているRAIDアレイでディスクの使用率が高くなっている原因で誰かまたは何らかのジョブが実行されていると確信しています。私たちのウェブサイトを殺している何かをしていることを誰も認めたくないので、問題はそれを証明しています。 私の質問は、SQLサーバーがI / Oを待機していることを示すのに役立つパフォーマンスカウンターまたはログに記録できるものですが、通常よりも多くを求めているためではなく、代わりにディスクがSQLサーバーからのリクエストに応答するためです通常のように迅速に?

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