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

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

4
単一のデータベースで列の照合順序を混在させるのが悪いと考えられるのはなぜですか?
私にこの質問をするように促す2つの理由があります。 tSQLt T-SQLテストフレームワークtSQLtは、デフォルト以外の照合を持つ列が存在する場合、それを「高重大度」の問題と見なします。テストの作成者は次のように述べています。 すべての文字列列に、データベースのデフォルトの照合と一致する照合が必要であることを示唆していません。代わりに、それが異なる場合には、それには十分な理由があるはずだと提案しています。 しかし、前述のように、失敗したテストの重大度は高いと見なされます。 Octopus Deploy Octopus Deploy Serverの構成中に、OctopusServer-instanceの初期化中に、セットアップがFATALエラーで失敗します。記事これは単純な要件ですが、理由を説明しないエラーメッセージに関連するが、それはからとタコのバージョン3.8を含め、今後の展開のための要件となることを述べています。 補足として、RedGateのCIツールパッケージであるDLM Automation Suiteは、さまざまな照合を使用したデプロイメントを問題なくサポートします。 すべての列の照合順序をデータベースのデフォルトに保つという推奨は、私にとってはガイドラインまたはベストプラクティスに似ています。一部の人がなぜこのような重大なエラーと見なしているのですか?

1
SQLServer Upgrade Advisor 2014がハングする
SQL Server 2008サーバーに対してSQL Server Upgrade Advisor 2014を実行しようとしています。 2008サーバーに接続するとすべてが正常に見え、分析するデータベースを選択できます。 しかし、起動すると、何もせずに永久に実行されます(ステップルールの分析:0/112のままです)。 何が起こって、どうすれば修正できますか? SQL Server 2008と2014はどちらもExpressバージョンであり、私のラップトップにインストールされています。残念ながら、これはアップグレードアドバイザーを実行するために私が見つけた唯一の方法です(実際のprod / devデータベースで実行するには制限が多すぎます)。 SQL 2008インスタンスには、必要に応じてSP3が適用されます。 Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) アドバイザがフリーズすると、4つのスリープクエリが表示されます(アクティブなクエリはありません)。 SELECT name, cmptlevel FROM …

1
SQL仕様ではEXISTS()にGROUP BYが必要ですか?
マイクロソフトでは現在、この構文を許可しています。 SELECT * FROM ( VALUES (1) ) AS g(x) WHERE EXISTS ( SELECT * FROM ( VALUES (1),(1) ) AS t(x) WHERE g.x = t.x HAVING count(*) > 1 ); ノーがあることに注意してくださいGROUP BYにEXISTS句は、その有効なANSI SQLです。それとも単に実装の詳細を公開するだけなのでしょうか。 参考までに、これと同じ構文はPostgreSQLでは許可されていません。 エラー:列 "tx"はGROUP BY句に出現するか、集計関数で使用する必要があります しかし、この構文は許可されています。 SELECT * FROM ( VALUES (1) ) AS g(x) WHERE EXISTS …

1
「EXISTS(…)OR EXISTS(…)」内の句の順序
2つの事柄の1つが存在するかどうかをテストするクエリのクラスがあります。それは形です SELECT CASE WHEN EXISTS (SELECT 1 FROM ...) OR EXISTS (SELECT 1 FROM ...) THEN 1 ELSE 0 END; 実際のステートメントはCで生成され、ODBC接続を介してアドホッククエリとして実行されます。 ほとんどの場合、2番目のSELECTは最初のSELECTよりも高速であり、2つのEXISTS句の順序を切り替えると、先ほど作成した1つ以上の不正なテストケースで劇的なスピードアップが発生したことが最近判明しました。 明らかなことは、先に進んで2つの句を切り替えることですが、SQL Serverに詳しいユーザーがこれを検討する必要があるかどうかを確認したかったのです。偶然と「実装の詳細」に頼っているような気がします。 (また、SQL Serverの方が賢い場合は、両方のEXISTS句を並行して実行し、どちらかが最初に完了したときに、もう一方を短絡させます。) SQL Serverがこのようなクエリの実行時間を一貫して改善するためのより良い方法はありますか? 更新 お時間と私の質問に関心をお寄せいただきありがとうございます。実際のクエリプランについての質問は期待していませんでしたが、共有したいと思っています。 これは、SQL Server 2008R2以降をサポートするソフトウェアコンポーネント用です。データの形状は、構成と使用法によってかなり異なる場合があります。(例では)dbf_1162761$z$rv$1257927703テーブルには常にテーブルよりも多くの行数が含まれるため、私の同僚はクエリにこの変更を加えることを考えましたdbf_1162761$z$dd$1257927703。 ここに私が言及した虐待事件があります。最初のクエリは低速で、約20秒かかります。2番目のクエリはすぐに完了します。 それが価値があることについては、パラメータのスニッフィングが特定のケースを破壊していたため、「OPTIMIZE FOR UNKNOWN」ビットも最近追加されました。 元のクエリ: SELECT CASE WHEN EXISTS (SELECT 1 FROM zumero.dbf_1162761$z$rv$1257927703 rv INNER JOIN zumero.dbf_1162761$t$tx …
11 sql-server 

1
SQL ServerクエリプランXML:QueryPlanHashの長さ
更新:これは間違いなくバグです。詳細については、こちらの接続アイテムをご覧ください。 sp_BlitzCacheへのいくつかの変更(完全な開示、私は作成者の1人)をテストしているときに、コードのバグだと思ったものに遭遇しました。 ある時点で、クエリコストを取得するためにクエリプランハッシュを照合しています。私たちはそのようにしています: statement.value('sum(/p:StmtSimple[xs:hexBinary(substring(@QueryHash, 3)) = xs:hexBinary(sql:column("b.QueryHash"))]/@StatementSubTreeCost)', 'float') これは、私が見た限りではうまくいきました。ただし、奇妙なケースの1つとして、XMLの部分文字列がNULL値をスローし、プランのコストはかなり高いにもかかわらず、コストが0でした。 掘り下げる実行計画(フル開示は、ホストが計画を貼り付けていること、会社のための私の仕事は)、私は、クエリプランハッシュは一つの問題ハッシュのための残りが18ここである例でありながら、17文字の長さだったことに気づきました。 QueryPlanHash = "0x4410B0CA640CDA89" QueryPlanHash = "0x2262FEA4CE645569" QueryPlanHash = "0xED4F225CC0E97E5"-問題! QueryPlanHash = "0xBF878EEE6DB955EA" QueryPlanHash = "0x263B53BC8C14A452" QueryPlanHash = "0x89F5F146CF4B476F" QueryPlanHash = "0xEF47EA40805C8961" QueryPlanHash = "0xB7BE27D6E43677A5" QueryPlanHash = "0x815C54EC43A6A6E9" クエリプランハッシュはaとしてリストされていますBINARY 8-おそらくこれは常に同じ長さでなければなりませんが、私のような人はバイナリ値について何を知っていますか? XQueryを少し試してみたところ、2番目の位置から開始するように部分文字列を変更すると、有効な(正しくないとしても)ハッシュ値が得られることがわかりました。 WITH XMLNAMESPACES('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p) SELECT QueryPlanCost = statement.value('sum(/p:StmtSimple/@StatementSubTreeCost)', 'float'), **q.n.value('substring(@QueryPlanHash, …

2
ネストされたループ結合が左結合のみをサポートするのはなぜですか?
クレイグ・フリードマンのブログ「ネストされたループ結合」では、ネストされたループ結合が右外部結合をサポートできない理由を説明しています。 問題は、内部テーブルを複数回(外部結合の行ごとに1回)スキャンすることです。これらの複数のスキャン中に、同じ内部行に複数回遭遇する可能性があります。特定の内側の行が結合していない、または結合しないと結論できるのはどの時点ですか? 誰かがこれを本当にシンプルで教育的な方法で説明してくれませんか? それは、ループが外側のテーブル(R1)で始まり、内側のテーブル()をスキャンすることを意味しR2ますか? とR1結合しない値については、結果セットが()になるようにR2aに置き換える必要があることを理解しています。参加しない場合に値を返すことは、私にとって不可能であるように思われます。理由は、返す値がわからないためです。しかし、それはそれが説明される方法ではありません。またはそれは?NULLNULL, R2R2R1R2 SQL Serverは、実際の最適化でない(そして多くの場合、置き換え)RIGHT JOINでLEFT JOIN、しかし問題は、それはだ理由を説明することで、技術的には不可能NESTED LOOPS JOINに使用する/サポートRIGHT JOINロジック。

2
RAMディスク上のSQL Server tempdb?
弊社のベンダーアプリケーションデータベースは非常にTempDBを集中的に使用しています。 サーバーは、SQL 2012 Enterprise SP3を実行する40コアおよび768GB RAMの仮想(VMWare)です。 TempDBを含むすべてのデータベースは、SANのTier 1 SSDにあります。tempdbデータファイルは10個あり、それぞれ1GBに事前に拡張されており、自動拡張されることはありません。70 GBのログファイルと同じです。トレースフラグ1117および1118は既に設定されています。 sys.dm_io_virtual_file_statsは、tempdbのデータとログファイルで過去1か月に50テラバイトを超えて読み書きされ、累積io_stallが250時間または10日であることを示しています。 過去2年間、ベンダーのコードとSPはすでに調整されています。 現在、大量のメモリがあるため、tempdbファイルをRAMドライブに配置することを考えています。tempdbはサーバーの再起動時に破壊/再作成されるため、サーバーの再起動時にフラッシュされる揮発性メモリに配置するのが理想的です。 低い環境でこれをテストしましたが、CPUが遅いtempdbドライブで待機するのではなく、より多くの作業を行っているため、クエリ時間は短縮されましたが、CPU使用率が増加しました。 他の誰かが、高oltp本番システムのtempdbをRAMに配置しましたか?大きな欠点はありますか?具体的に選択または回避するベンダーはありますか?

2
HTMLコードをXMLとして読み取り、SQLのサンプルのような出力を取得する方法
データベースにHTMLコードが格納されていて、それをXMLとして読みたい。 私のコード: http://rextester.com/RMEHO89992 これは私が持っているHTMLコードの例です: <div> <section> <h4> <span> A </span> </h4> <ul> <li> <span> Ab</span> AD <span> AC </span> </li> <li> <span> Ag</span> <span> AL </span> </li> </ul> <h4> <span> B </span> </h4> <ul> <li> <span> Bb</span> BD <span> BC </span> </li> <li> <span> Bg</span> <span> BL </span> </li> </ul> …
11 sql-server  t-sql  xml 

2
動的SQL(ピボットクエリ)をxml出力に変換するときに、日付の最初の桁がUnicodeに変換されるのはなぜですか?
Bluefeetのこの素晴らしい例/dba//a/25818/113298を使用して、ピボットを作成し、それをxmlデータに変換しています。 パラメータの宣言 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); 次に、多くのコードを含むCTEがあり、CTEの最終結果が一時DBに配置されます(例と同じ)。 SELECT B.[StayDate] -- this is a date dd-mm-yyyy , B.[Guid] INTO #tempDates FROM BaseSelection B colsの生成(例と同じ) SELECT @cols = STUFF((SELECT distinct ',' +QUOTENAME(convert(char(10), [StayDate] , 120)) FROM #tempDates FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,''); 結果セットは私が期待すべきものです set @query = 'SELECT …
11 sql-server  xml  pivot 

3
SQL Serverのバージョンに応じて、RAISERRORまたはTHROWを選択することはできますか?
これが私のコードです: BEGIN TRY INSERT INTO TABLE (F1,F2,F3) VALUES ('1','2','3') END TRY BEGIN CATCH ;THROW END CATCH SQL 2008が搭載されたマシンで実行しない限り、うまく機能します。CATCHブロックでSQLバージョンをチェックし、それが2012以上の場合はTHROWを実行し、2008の場合はRAISERRORを実行します。構文エラー、それが可能かどうか疑問に思っています。このような単純なものでさえ、私にはうまくいきません。 BEGIN CATCH IF ((SELECT SERVERPROPERTY('productversion')) >= 11) ;THROW END CATCH 任意のアドバイスをいただければ幸いです。

4
SET操作に参加できるローカル変数の最大数はいくつですか?
ビジネスロジックを含むストアドプロシージャがあります。その中には約1609の変数があります(理由は聞かないでください、これがエンジンのしくみです)。SET変数を他のすべての変数の連結値にしようとしています。結果として、作成中にエラーが発生します。 メッセージ8631、レベル17、状態1、手順XXX、行YYY内部エラー:サーバーのスタック制限に達しました。クエリで潜在的に深い入れ子を探し、それを単純化してみてください。 エラーは、SET操作で使用する必要がある変数の数が原因であることがわかりました。2つに分けて割り当てができます。 私の質問は、この領域にいくつかの制限があるのですか?チェックしましたが何も見つかりませんでした。 このKBに記載されているエラーを確認しましたが、これは私たちのケースではありません。CASEコード内では式を使用しません。その一時変数を使用して、CLR関数を使用して置き換える必要がある値のリストを準備します。SQL ServerをSP3 CU6(最新)に更新しましたが、まだエラーが発生しています。

2
SQL Server-NTEXT列と文字列操作
というNTEXT列のあるテーブルがありますcomments。私は2番目の文字列を持っている、のは、それを呼びましょうanothercomment(varcharニーズが与えられたの内側に置くこと)comments言葉の後の文字列UPDATEHERE。 キャストするnvarchar(max)とcomments文字列が切り捨てられるため、CHARINDEX()(のようなものは使用できませんMsg 8152, Level 16, State 10, Line 2 String or binary data would be truncated.)。以前datalength()は、8000文字を超える数千の列があることを確認してきました。 (はるかに長い文字列ではありますが)私が達成したいことの例: コメント- This is a test UPDATEHERE This is the end of the test 別のコメント- . This is inserted. 結果の文字列- This is a test UPDATEHERE. This is inserted. This is the end of the …

10
標準SQLまたはT-SQLで1、2、3、3、2、1、1、2、3、3、2、1、…シリーズを生成する方法は?
二つの数を考えるnとm、私は、フォームのシリーズを生成したいです 1, 2, ..., (n-1), n, n, (n-1), ... 2, 1 そしてそれを繰り返しmます。 たとえば、n = 3およびの場合、m = 4次の24個の数字のシーケンスが必要です。 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1 ---------------- ---------------- ---------------- ---------------- PostgreSQLでこの結果を2つの方法のいずれかで達成する方法を知っています。 generate_series関数を使用する次のクエリと、順序が正しいことを保証するためのいくつかのトリックを使用します。 WITH parameters (n, …

1
###。###。####パターン一致を強制するCHECK制約
マルチパートコードにこの正規表現パターンを適用するチェック制約が必要です。 ^\d{3}\.\d{3}\.\d{4}$ ... 3つの数字、ピリオド、3つの数字、ピリオド、4つの数字。 パターンマッチングを実施するためにCLR関数を作成する必要がありますか?また、CLR関数はDDLで参照できますか? 別の方法でパターンを適用する方法はありLIKEますか?

3
WHERE句の変数でnullチェックを行う方法は1回だけですか?
次のような大きなテーブルに対するクエリがあります。 declare @myIdParam int = 1 select * from myTable where (@myIdParam is null or myTable.Id = @myIdParam) where句には、このような同様の条件がいくつかあり、結合も多数ありますが、これは要約です。 事実上、@ myIdParamがnullの場合、このパラメーターを使用して結果を制限する必要はありません。 私はDBプロではありませんが、私のテストから、このNULLチェックはすべてのレコードに対して行われ、どのような方法でも最適化されていないようです。 nullチェックを削除し、パラメーターがnullではないと想定すると、クエリは即座に返されます。それ以外の場合は、最大10秒かかります。 これを最適化する方法があるので、チェックは実行時に一度だけ行われますか?
11 sql-server  null 

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