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

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


3
ビューのORDER BY句の代替手段は何ですか?
この質問はこのサイトにある必要がありました:) このビューを使用する場合、複数のorder byが存在する可能性があるため、ORDER BYはビューでの使用を禁止されています。 たとえばTOP 99.999999 PERCENT、この制限を回避する方法があることは知っていますが、ハッキングの方法ではなく、ベストプラクティスを知りたいと思います。 したがって、個人使用のためにデータベースにビューを作成する場合、つまりデータベースに接続し、固定およびソートされたデータのみを表示する場合、ビューを注文できない場合はどうすればよいですか? 現在、SQL Server DBには、TOPハックに関するビューがあり、よく使用していますが、間違っていると感じています。

4
次の文字列を次の順序で並べ替える照合順序はありますか?1,2,3,6,10,10A、10B、11?
可変長の整数を含むVARCHAR列を持つデータベースがあります。私はそれらをソートして、10が1ではなく9の後に来るようにし、70Aが70の後に来るようにします。WHERE句のPATINDEX()、CTE、およびCASEステートメントでこれを行うことができました。 しかし、これが不必要な照合があるかどうか疑問に思っていました。

4
列の制約(インデックス)の削除
インデックスがあるテーブルのタイプを変更するにはどうすればよいですか?空のテーブルで列を変更して型を日付時刻からvarchar(15)に変更しようとしましたが、列(インデックスであることが判明)に依存しているというエラーが表示されました。 インデックスを右クリックしてドロップをスクリプト化することで、これをローカルで簡単に回避できましたが、インデックス名にアクセスできない他のサーバーでこれを展開する必要があります。 インデックスを削除するスクリプトを作成する方法はありますか?列でそのデータ型を変更してからインデックスを読み取ることができますか?ありがとう!

5
大規模なデータセットでの時間ごとのグループ化
MS SQL 2008を使用して、250万件のレコードから平均フィールドを選択しています。各レコードは1秒を表します。MyFieldは、これらの1秒のレコードの1時間ごとの平均です。もちろん、サーバーのCPUが100%に達し、選択に時間がかかりすぎます。SQLが各リクエストでこれらのレコードをすべて選択する必要がないように、これらの平均値を保存する必要があります。何ができますか? SELECT DISTINCT CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as VARCHAR) AS TimeStampHour, MIN([timestamp]) as TimeStamp, AVG(MyField) As AvgField FROM MyData WHERE TimeStamp > '4/10/2011' GROUP BY CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as VARCHAR) ORDER BY TimeStamp
12 sql-server  query 



2
SQL Server 2005のNullable列の一意の制約
私が取り組んでいるこの1つのプロジェクトでは、特定のフィールドを一意に設定する必要があります(問題ではありません!)が、フィールドがnullの場合、制約を無視する必要があります。Sql Server 2008では、以下に示すようにフィルター選択されたインデックスを使用しますが、これは以前のバージョンのSQLでは使用できません! CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC ON [User] (pinNr) WHERE UserName IS NOT NULL しかし、これはSQL Server 2005で利用できるとは思いません。実際、このブログ投稿では、トリガーを使用して一意性を確認する回避策があることを示しています。誰もこれの例を持っていますか?または多分代替案? 残念ながら、SQl Server 2008へのアップグレードは、この特定のクライアントのオプションではありません!!

3
Microsoft SQL Server内から古いクエリプランをすべてクリアするにはどうすればよいですか?
Microsoft SQLデータベースを使用する既製のアプリケーションがあります。このアプリケーション内で、各レポートのさまざまな選択基準を選択します。その後、このアプリケーションはこれらのレポートを実行します。 クエリプランに問題があると思います。毎日実行する最初のレポートは、非常に高速で7分実行されます。最初のレポートの後に実行されるレポートは1時間以上かかります。 毎晩、SQL ServerエージェントとSQL Serverを停止および起動するスケジュールされたタスクを実行します。このSQL Serverの1つのインスタンス内には、約25の他のデータベースがあります。他のデータベースにはパフォーマンスの問題はありません。先ほど述べた市販製品のみです。 SQL Serverが現在メモリに保持しているすべてのクエリプランをクリアする方法はありますか? 同じサーバー上の他のデータベースに依存する30人程度のユーザーに影響を与えずにこれを行うにはどうすればよいですか?

1
SQL Serverのインデックス作成メモリ設定を変更するとどのような影響がありますか?
SQL Server 2008データベースにいくつかのインデックスを作成しようとしていますが、次のエラーメッセージが表示されます。 メッセージ8606、レベル17、状態1、行1このインデックス操作には、DOPあたり1024 KBのメモリが必要です。2のDOPの合計要件2048 KBは、高度なサーバー構成オプション「index create memory(KB)」に設定された704 KBのsp_configure値よりも大きくなっています。この設定を増やすか、DOPを減らしてクエリを再実行してください。 現在、インデックス作成メモリの設定は794KBに設定されており、クエリごとの最小メモリは1024KBに設定されています。これらの値を変更するとどのような影響がありますか?特にパフォーマンスに関して。それらを変更し、インデックスを作成して元に戻す必要がありますか、それとも0に設定する必要がありますか?


1
関数DECRYPTBYPASSPHRASEを使用するときに、SQL Serverが暗号化されたデータを復号化するために使用したハッシュアルゴリズムをどのようにして知ることができますか?
私の質問は、2つのインスタンスを使用した次の実験に関連しています。 SQL Server 2017 Expressインスタンス(Microsoft SQL Server 2017(RTM-CU16)) SQL Server 2014 Expressインスタンス(Microsoft SQL Server 2014(SP2-CU18)) 関数ENCRYPTBYPASSPHRASEを使用してテキストを暗号化し、その結果をDECRYPTBYPASSPHRASEの@ciphertextとして使用しました。私のテストの結果はこれらでした: このMicrosoftの修正によると、 [...] SQL Server 2017は、SHA2ハッシュアルゴリズムを使用してパスフレーズをハッシュします。SQL Server 2016およびそれ以前のバージョンのSQL Serverは、安全と見なされなくなったSHA1アルゴリズムを使用します。 しかし、関数DECRYPTBYPASSPHRASEに関連する引数がない場合、データの暗号化に使用されたアルゴリズムはどのようにしてわかりますか?暗号化されたデータの一部ですか? 私のテストの結果から、SQL Serverは常にインスタンスで使用可能な新しいバージョンのアルゴリズムを使用してデータを暗号化すると思いますが、対応するアルゴリズムが見つからない場合、すべてのアルゴリズムがデータを復号化して、適合するアルゴリズムまたはNULLを返すまでデータを復号化します。暗号化されたデータを復号化するためにSQL Serverがどのハッシュアルゴリズムを使用したかを確認する方法が見つからなかったので、それは単なる推測です。

1
VARCHAR(MAX)列がインデックスに含まれている場合、値全体が常にインデックスページに格納されますか?
私はこの質問に触発されて、好奇心からこれを求めています。 VARCHAR(MAX)8000バイトを超える値は行に格納されず、個別のLOBページに格納されることがわかっています。その後、そのような値を持つ行を取得するには、2つ以上の論理IO操作が必要です(基本的に、理論的に必要な場合よりも1つ多い)。 リンクされた質問に示されているように、VARCHAR(MAX)列をINCLUDEd として一意のインデックスに追加できます。この列の長さが8000バイトを超える場合、そのような値は引き続きインデックスリーフページに「インライン」で格納されますか、それともLOBページに移動されますか?

5
SQLストアドプロシージャを一度に1人で実行するように制限するにはどうすればよいですか?
基本的に、あるテーブルから値を選択して別のテーブルに挿入するストアドプロシージャがあります。これは一種のアーカイブです。複数の人が同時にそうするのを避けたいです。 このプロシージャが実行されている間、他の人がそれを開始できるようにしたくはありませんが、シリアライゼーションは必要ありません。他の人は、処理が終わった後にプロシージャを実行します。 私が欲しいのは、プロシージャを実行しているときに、他の人がそれを開始しようとしてエラーが発生することです。 私はsp_getapplockを使用して試しましたが、その人がプロシージャを実行するのを完全に止めることができません。 また、sys.dm_exec_requestsを使用してプロシージャを見つけてブロックしましたが、これは機能しますが、一部のサーバーではsys.dm_exec_sql_text(sql_handle)を実行する権限がないため、最適ではないと思います。 これを行うための最良の方法は何ですか?

1
バックアップは破損を検出しますが、CHECKDBは検出しません
バックアップコマンドを実行したときにデータベースがある BACKUP DATABASE [MyDatabase] TO DISK = 'G:\Backup\MyDatabase_01_01_2018.bak' WITH NOFORMAT, NOSKIP, COMPRESSION, INIT, BUFFERCOUNT = 100 エラーメッセージが表示される メッセージ3043、レベル16、状態1、行8 バックアップ 'MyDatabase'は、ファイル 'F:\ Data \ MyDatabase_1.ndf'のページ(1:745345)でエラーを検出しました。 メッセージ3013、レベル16、状態1、行8 BACKUP DATABASEが異常終了しています。 完全なCHECKDBを実行しましたが、正常に戻りました。ページ検証オプションが(自分ではなく)NONEに設定されていることに気付いたので、それをCHECKSUMに変更し、DB内のすべてのインデックスを再構築して、すべてのページに書き込み、チェックサムを生成しました。この後もバックアップは失敗し、checkdbはまだクリーン(変更がない)を示しています。 DBCC CHECKDB('MyDatabase') WITH NO_INFOMSGS, ALL_ERRORMSGS, DATA_PURITY, EXTENDED_LOGICAL_CHECKS; SQLログから: DBCC CHECKDB(MyDatabase)with all_errormsgs、no_infomsgs、xxxによって実行されたdata_purityは0エラーを検出し、0エラーを修復しました。経過時間:0時間21分46秒。内部データベースのスナップショットには、分割ポイントLSN = 000ab776:0000112f:0001と最初のLSN = 000ab776:0000112d:0001があります。 DBCC PAGEを実行しましたが、エラーが発生しました(そもそも正しいページが返されていないようです)。印刷オプション2で実行できますが、戻りますが、正直なところ、何を探しているのかわかりません。 DBCC PAGE ('MyDatabase',1,745345,3) ページ:(3:513793) バッファ: …

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