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

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

2
アクセントセンシティブソート
なぜこれらの2つのSELECTステートメントが異なるソート順になるのですか? USE tempdb; CREATE TABLE dbo.OddSort ( id INT IDENTITY(1,1) PRIMARY KEY , col1 NVARCHAR(2) , col2 NVARCHAR(2) ); GO INSERT dbo.OddSort (col1, col2) VALUES (N'e', N'eA') , (N'é', N'éB') , (N'ë', N'ëC') , (N'è', N'èD') , (N'ê', N'êE') , (N'ē', N'ēF'); GO SELECT * FROM dbo.OddSort ORDER BY col1 …

2
数百台のマシンでSQL ServerのCU更新を実行するクールな方法はありますか?
私の会社は、合併買収で一晩で50台のSQL Serverから200台以上に成長しました。助けて! 私の質問は: この多くのサーバーでCUの更新を実行し、それでも生命を保ち、正気を保つにはどうすればよいですか?SCCMはCU更新を実行できないようです。 他の誰かが何百台ものサーバーでCU更新を実行できましたか? 他の選択肢は何ですか?

3
トレースフラグ4199-グローバルに有効にしますか?
これは意見の範疇に入るかもしれませんが、人々がSQL Serverの起動パラメーターとしてトレースフラグ4199を使用している場合、私は興味があります。それを使用した人のために、どのような状況でクエリ回帰が発生しましたか? 確かに全体的なパフォーマンスの向上の可能性があるように思えます。非実稼働環境でグローバルに有効にし、問題を排除するために数か月間放置することを検討しています。 4199の修正は、2014年(または2016年)にデフォルトでオプティマイザーに反映されますか?予期しない計画変更を導入しない場合は理解できますが、バージョン間でこれらの修正をすべて隠しておくのは奇妙に思えます。 2008、2008R2、主に2012を使用しています。

4
ID列のインデックスは非クラスター化する必要がありますか?
ID列を持つテーブルの場合、ID列に対してクラスター化または非クラスター化PK /一意のインデックスを作成する必要がありますか? その理由は、クエリ用に他のインデックスが作成されるためです。非クラスター化インデックス(ヒープ上)を使用し、インデックスでカバーされない列を返すクエリは、余分なクラスター化インデックスBツリーシークステップがないため、使用する論理I / O(LIO)が少なくなりますか? create table T ( Id int identity(1,1) primary key, -- clustered or non-clustered? (surrogate key, may be used to join another table) A .... -- A, B, C have mixed data type of int, date, varchar, float, money, .... B .... C .... ....) create …

8
特定のログインに対してマップされたすべてのユーザーをリストするクエリ
特定のログインのプロパティを見ると、そのログインにマップされているユーザーのリストを見ることができます: SQL Server Management Studio(SSMS)のプロファイルを作成しましたが、SSMSはすべてのデータベースに一度に1つずつ接続し、sys.database_permissionsから情報を取得することがわかりました 上記のユーザーマッピング情報を取得する単一のクエリを作成することは可能ですか、それともカーソルやsp_MSforeachdbなどを使用する必要がありますか?

3
クエリのパフォーマンスを最適に測定するにはどうすればよいですか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 5年前に移行され ました。 2つのストアドプロシージャがあり、2番目のストアドプロシージャは最初のストアドプロシージャの改良版です。 どれだけ改善されているかを正確に測定しようとしています。 1 / clock time実行時間が異なるため、測定はオプションではないようです。さらに悪いことには、2番目のストアドプロシージャの実行時間が、2番目のストアドプロシージャの実行時間よりも長い場合があります(まれに起こります)(その瞬間のサーバーのワークロードによると思います)。 2 / Include client statisticsは、異なる結果も提供します。 3 / DBCC DROPCLEANBUFFERS、DBCC FREEPROCCACHE良いですが、同じ話... 4 / SET STATISTICS IO ONはオプションかもしれませんが、ストアドプロシージャに多くのテーブルが関係しているので、どうすれば総合スコアを取得できますか? 5 / Include actual execution planもオプションです。estimated subtreecost最初のストアドプロシージャで0.3253を取得し、2番目のストアドプロシージャで0.3079 を取得します。2番目のストアドプロシージャは6%高速(= 0.3253 / 0.3079)と言えますか? 6 / SQL Server Profilerの「読み取り」フィールドを使用していますか? では、実行条件(サーバーのワークロード、これらのストアドプロシージャが実行されるサーバーなど)に関係なく、2番目のストアドプロシージャが最初のプロシージャよりもx%高速であると言えますか? それが不可能な場合、2番目のストアドプロシージャの実行時間が最初のストアドプロシージャよりも優れていることをどのように証明できますか?

2
CREATE TABLEをロックする
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 5年前に移行され ました。 別のアプリケーションでは、設計が悪いことに感銘を受けました。複数のスレッドがEnsureDatabaseSchemaExists()メソッドを同時に実行します。これは基本的に次のようになります。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN CREATE TABLE MyTable ( ... ); END ただし、SERIALIZABLEトランザクションで実行された場合でも、このコードはスレッドセーフではないようです(つまり、並列コードはテーブルを複数回作成しようとします)。別のスレッドがまったく同じSELECTステートメントを実行できないようにするロックを取得するためにSELECTステートメントを強制する機会はありますか? multi-threaded-EnsureSchemaExists()メソッドのより良いパターンはありますか?

1
24時間365日と夜間の時間枠
年中無休の運用に移行する方法に関するリソースはどこにありますか?大きなデータベースを持つ大企業はどのようにこれを達成しますか?次のような夜間の仕事 古いデータを消去する 再インデックス 統計を更新する すべてがシステムに重大な影響を与えるようです(つまり、オンラインユーザーとリアルタイムデータフィード)。このテーマに関連する本をAmazonで探しましたが、今のところ何も見つかりませんでした。
19 sql-server 

5
SQL Server 2012:コマンドラインからのスクリプトの生成
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 5年前に移行され ました。 SQL Server 2012を実行しています。 SQL Server Management Studioには、データベースを右クリックして、[タスク]および[スクリプトの生成]を選択するオプションがあります。 コマンドライン経由でそれを自動化する方法はありますか? データベース全体のスキーマとデータを含むスクリプトを作成したい。 ツールのようにScriptDBしてsqlpubwiz.exe、すべては何SQL Server 2012のについてSQL Serverの2005を対象とするように見えますか?

1
この構文はどのように機能しますか?{fn CurDate()}または{fn Now()}など
最近、SQL Server 2005用に作成されたかなり古いストアドプロシージャを調べてきましたが、理解できないことがわかりました。何らかのタイプの関数呼び出しのようです。 サンプル: SELECT o.name, o.type_desc, o.create_date FROM sys.objects o WHERE o.create_date < {fn Now()} -1; これは、すべての行が表示されますsys.objects持ってcreate_date前から24時間前。 このクエリの実行プランを表示する{fn Now()}とgetdate()、データベースエンジンに置き換えられていることがわかります。 SELECT [o].[name],[o].[type_desc],[o].[create_date] FROM [sys].[objects] [o] WHERE [o].[create_date]<(getdate()-@1) 明らかに、を使用すること{fn Now()}は、よりもはるかに鈍いですGetDate()。文書化されていないので、私はペストのようなこの構文を避けます。

3
SQLCMDコマンドはアクセントを挿入できません
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 6年前に移行され ました。 コマンドラインから新しいデータベースをセットアップするために、sqlcmd.exeを実行しようとしています。Windows 7 64ビットでSQL SERVER Express 2012を使用しています。 私が使用するコマンドは次のとおりです。 SQLCMD -S .\MSSQLSERVER08 -V 17 -E -i %~dp0\aqualogyDB.sql -o %~dp0\databaseCreationLog.log 次に、SQLファイル作成スクリプトの一部を示します。 CREATE DATABASE aqualogy COLLATE Modern_Spanish_CI_AS WITH TRUSTWORTHY ON, DB_CHAINING ON; GO use aqualogy GO CREATE TABLE [dbo].[BaseLayers] ( [Code] nchar(100) NOT NULL , [Geometry] nvarchar(MAX) NOT NULL …

5
リンクサーバーでCASE式に10ブランチという制限があるのはなぜですか?
なぜこのCASE式は: SELECT CASE column WHEN 'a' THEN '1' WHEN 'b' THEN '2' ... c -> i WHEN 'j' THEN '10' WHEN 'k' THEN '11' END [col] FROM LinkedServer.database.dbo.table この結果を生成しますか? エラーメッセージ:メッセージ8180、レベル16、状態1、行1 ステートメントを準備できませんでした。メッセージ125、レベル15、状態4、行1のケース式はレベル10にのみネストできます。 CASE10個以上の「ブランチ」がありますが、ここには明らかにネストされた式はありません。 もう一つの奇妙な。このインラインテーブル値関数は、同じエラーを生成します。 ALTER FUNCTION [dbo].[fn_MyFunction] ( @var varchar(20) ) RETURNS TABLE AS RETURN ( SELECT CASE column WHEN 'a' …

5
SQL Server 2008R2の最適なドライブ構成
SQL Server 2008 R2を実行している次のセットアップを備えたかなり忙しいデータベースサーバーがあります。 SATA RAID 1(2ドライブ)-OS /プログラム SAS RAID 10(4ドライブ)-SQLデータベースファイル(データとログ) SAS RAID 1(2ドライブ)-TempDB(データとログ) このサーバーにドライブを追加できないと仮定して、利用可能な構成を最大限に活用しましたか?または、たとえばログをデータファイルから分離する別のスキームを検討する必要がありますか? 更新: ハードウェアの詳細をさらにリクエストした場合: SATAドライブ(OS /プログラムパーティションに使用)は次のとおりです。WD 7200 RPM 3 Gb / s 3.5インチSATA 他のアレイで使用されるSASドライブは次のとおりです。Seagate 15K RPM 6 Gb / s 3.5インチSAS 使用されるRAIDコントローラーは、LSI 9260-8i SAS / SATA 6 Gb 8ポートです。 アップデート2: 私が受け取ったフィードバックに基づいて、選択可能な次の実行可能なオプションがあるように見えます-私が概説した環境で最高である可能性が高いことを教えてくれる人に賞金を授与します: すべてをそのままにしておきます-私はおそらくあまり良くはしません 2台のSAS RAID 1ドライブを既存のRAID 10アレイに移動して、合計6台のディスクで構成する ログファイルをSAS …

3
選択で一致する余分な文字を含む一意の識別子
一意の識別子を使用してSQL Server 2012を使用していますが、末尾に追加文字(36文字ではない)を追加して選択すると、UUIDとの一致が返されることに気付きました。 例えば: select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8' 行をuuidで返します7DA26ECB-D599-4469-91D4-F9136EC0B4E8。 しかし、あなたが実行した場合: select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8EXTRACHARS' また、uuidを持つ行を返します7DA26ECB-D599-4469-91D4-F9136EC0B4E8。 SQL Serverは、選択を行うときに36を超えるすべての文字を無視するようです。これはバグ/機能または構成可能なものですか? フロントエンドで長さの検証を行っているため、大きな問題ではありませんが、私には正しい動作とは思えません。


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