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

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

4
プライマリファイルグループは完全なSQL Server 2008です
大きなテーブル(〜5000万行)があり、SQL Serverに一括挿入しようとしていますが、次のエラーが表示されます。 「PRIMARY」ファイルグループがいっぱいであるため、データベース「I 3 Stroke」のオブジェクト「myDB」にスペースを割り当てることができませんでした。不要なファイルの削除、ファイルグループ内のオブジェクトの削除、ファイルグループへの追加ファイルの追加、またはファイルグループ内の既存ファイルの自動拡張の設定により、ディスク領域を作成します。 データベースには、約2500万行の別のテーブルがあります。このデータベースは1台のマシンでのみ使用され、既存のデータをマイニングするように設計されており、現在のサイズを超えて成長することはありません。 このような状況で、SQL Serverが文句を言わないようにこれに取り組む最善の方法は何ですか?このDBが複数のユーザーに公開されないというソリューションは重要ですか?

5
手書きのコードでSQL Serverのブラケット表記を使用するのは理にかなっていますか?
コードジェネレーターは[]、ほぼすべてに対して新しいMicrosoftブラケット表記()を使用して出力を生成する場合、より単純になる傾向があります。 最初に見たとき、やや禁止された引用識別子表記法の生まれ変わりをすごいけど。 私の知る限り、Microsoft独自の拡張機能です(つまり、Oracleはサポートしていません)。 SQL Serverを見ると、次のようなテーブルを定義しても違いはありません。 CREATE TABLE [dbo].[Table_2] ([col1] [int], [col2] [int]); または CREATE TABLE dbo.Table_2 (col1 int, col2 int); それは個人的または企業スタイルの問題です。一貫してください。 データベースをOracleに移行する場合、括弧はオプションではありません。 古い引用識別子を使用できますが、これらは大文字と小文字を区別するため、多くの問題を引き起こします。 生成されたコードからすべてのブラケットを削除し、名前に空白、他の特殊文字、予約キーワードを使用することを避け、ほとんどのDBMSが理解できる方法でコードを作成することをお勧めしますか?

1
SQL ServerでBase64文字列をネイティブにデコードする
私が持っているvarchar、私はそれのプレーンテキスト同等にデコードしたいBase64でエンコードされたテキスト文字列を保持するSQL Serverのテーブルのカラムを SQL Serverには、このタイプのものを処理するためのネイティブ機能がありますか? base64文字列の例: cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA== デコードするもの: role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764

6
saパスワードの変更
SQL Server Management Studio 2012を使用してsaアカウントのパスワードを変更しようとしています。以下の手順に従いましたが、パスワードはまだ同じです。 SQL Server Management Studioにログインし、データベースエンジン、\ SBSmonitoring、Windows認証を選択します。 オブジェクトエクスプローラー-セキュリティフォルダー-ログインフォルダーに移動します。 SAアカウントを右クリックし、[プロパティ]オプションを選択します。 General Pageで、SAパスワードを変更して確認します。 ステータスページで、[ログイン]を[有効]に変更します。[OK]をクリックして変更を保存します。 SQL Serverとそのすべてのサービスを再起動します。 何か案が ?
15 sql-server 


1
クエリ結果を物理プリンターに直接送信するエレガントな方法はありますか?
レポートをスケジュールしてプリンターに印刷するというこの奇妙な要求を受けました。 レポート自体は非常にシンプルで、1ページに収まります。私はそれをtxtに印刷することができ、それはうまくいきます(私はより良い製品に関する提案を受け入れていますが)。 コードは次のとおりです。できます。しかし、私はそれが好きではありません。具体的には、ネストされた@bcpと@SQLを廃止したいと思います。 質問:これを行うよりエレガントな方法はありますか? declare @filepath varchar(255), @filename varchar(255), @filetype varchar(255), @sql nvarchar(max), @coverpage_text nvarchar(max) set @filepath = 'C:\users\jmay\documents\' SET @filename = 'TestFile' set @filetype = '.txt' --output to txt set @sql = N'declare @bcp varchar(4000) set @bcp = ''bcp " select * from test_data " queryout ' + @filepath …
14 sql-server 

2
常時スキャンスプーリング
数十行のテーブルがあります。簡略化されたセットアップは次のとおりです CREATE TABLE #data ([Id] int, [Status] int); INSERT INTO #data VALUES (100, 1), (101, 2), (102, 3), (103, 2); そして、このテーブルを、一連のテーブル値で構成された行(変数と定数で構成される)に結合するクエリがあります。 DECLARE @id1 int = 101, @id2 int = 105; SELECT COALESCE(p.[Code], 'X') AS [Code], COALESCE(d.[Status], 0) AS [Status] FROM (VALUES (@id1, 'A'), (@id2, 'B') ) p([Id], [Code]) FULL JOIN …

4
インデックスの一意性のオーバーヘッド
私はオフィスのさまざまな開発者と、インデックスのコスト、および一意性が有益であるか高価であるか(おそらく両方)について継続的な議論を行ってきました。問題の核心は、競合するリソースです。 バックグラウンド 操作はBツリーのどこに収まるかを暗黙的にチェックし、一意でないインデックスに重複が見つかった場合は、一意化を追加するため、インデックスUniqueを維持するための追加コストはないという説明を以前読んだInsertことがありますキーの終わりですが、それ以外の場合は直接挿入します。この一連のイベントでは、Uniqueインデックスに追加コストはありません。 私の同僚Uniqueは、Bツリー内の新しい位置へのシーク後の2番目の操作として強制されるため、このステートメントに対抗します。したがって、一意でないインデックスよりも維持にコストがかかります。 最悪の場合、テーブルのクラスタリングキーであるID列(本質的に一意)を持つテーブルを見たことがありますが、明示的に非一意であると述べられています。最悪の反対側には、一意性への執着があり、すべてのインデックスは一意として作成されます。インデックスに明示的に一意のリレーションを定義できない場合は、テーブルのPKをインデックスの末尾に追加して、一意性が保証されます。 私は開発チームのコードレビューに頻繁に関与しており、彼らが従うための一般的なガイドラインを提供できる必要があります。はい、すべてのインデックスを評価する必要がありますが、それぞれ数千のテーブルとテーブルに最大20のインデックスを持つ5つのサーバーがある場合、特定のレベルの品質を確保するためにいくつかの簡単なルールを適用できる必要があります。 質問 一意性には、Insert非一意のインデックスを維持するコストと比較して、バックエンドで追加コストがかかりますか?第二に、一意性を確保するためにインデックスの最後にテーブルの主キーを追加することの何が問題になっていますか? テーブル定義の例 create table #test_index ( id int not null identity(1, 1), dt datetime not null default(current_timestamp), val varchar(100) not null, is_deleted bit not null default(0), primary key nonclustered(id desc), unique clustered(dt desc, id desc) ); create index [nonunique_nonclustered_example] on #test_index (is_deleted) include …

5
多くのヌル可能整数を1:1からバイナリ文字列に変換する最速の方法は何ですか?
ワークロードの一部では、不気味なハッシュアルゴリズムを実装するCLR関数を使用して行を比較し、列の値が変更されたかどうかを確認します。CLR関数はバイナリ文字列を入力として受け取るため、行をバイナリ文字列に変換する高速な方法が必要です。全ワークロード中に約100億行をハッシュすると予想されるため、このコードを可能な限り高速にしたいと思います。 異なるスキーマを持つ約300のテーブルがあります。この質問の目的のために、32のNULL入力可能INT列の単純なテーブル構造を想定してください。サンプルデータと、この質問の最後に結果をベンチマークする方法を提供しました。 すべての列の値が同じ場合、行は同じバイナリ文字列に変換する必要があります。列の値が異なる場合、行は異なるバイナリ文字列に変換する必要があります。たとえば、次のような単純なコードは機能しません。 CAST(COL1 AS BINARY(4)) + CAST(COL2 AS BINARY(4)) + .. NULLを正しく処理しません。場合COL1NULLが行1のためのものであり、COL2行2のためにNULLである、両方の行がNULL文字列に変換されます。NULLを正しく処理することは、行全体を正しく変換することの最も難しい部分だと思います。INT列に許可されるすべての値が可能です。 質問を先取りするには: それが重要な場合、ほとんどの時間(90%+)の列はNULLになりません。 CLRを使用する必要があります。 この数の行をハッシュする必要があります。ハッシュを維持できません。 CLR関数があるため、変換にバッチモードを使用できないと思います。 32個のNULL可能INT列をBINARY(X)or VARBINARY(X)文字列に変換する最速の方法は何ですか? 約束どおりのサンプルデータとコード: -- create sample data DROP TABLE IF EXISTS dbo.TABLE_OF_32_INTS; CREATE TABLE dbo.TABLE_OF_32_INTS ( COL1 INT NULL, COL2 INT NULL, COL3 INT NULL, COL4 INT NULL, COL5 INT NULL, COL6 …

3
XPath / XQueryを使用して同じXML要素のすべての値を連結する
次のようなXML値があります。 <R> <I>A</I> <I>B</I> <I>C</I> ... </R> すべてのI値を連結して、単一の文字列として返しますABC...。 これで、XMLを細断し、結果をノードレスXMLとして集計し、結果に適用できる.values('text()[1]', ...)ことがわかりました。 SELECT ( SELECT n.n.value('text()[1]', 'varchar(50)') AS [text()] FROM @MyXml.nodes('/R/I') AS n (n) FOR XML PATH (''), TYPE ).value('text()[1]', 'varchar(50)') ; ただし、次のようなXPath / XQueryメソッドのみを使用してすべてを実行したいと思います。 SELECT @MyXml. ? ( ? ); そのような方法はありますか? この方向で解決策を探している理由は、実際のXMLにも他の要素が含まれているためです。たとえば、 <R> <I>A</I> <I>B</I> <I>C</I> ... <J>X</J> <J>Y</J> <J>Z</J> ... …

1
私の同僚はどのようにして自分のスキーマを手に入れましたか?
次のストアドプロシージャがあります。 テーブルが存在するかどうかを確認し、存在する場合は削除します。 そのテーブルを再度作成します 次に、そのテーブルに約30個のクエリを入力します。 私(DBオーナー)がこのプロシージャを実行すると、すべてが意図したとおりに機能します。Active Directoryのロールを介してこのデータベースに対するDROP / CREATE権限を持っている同僚がそうすると、いくつかの問題が発生します。私の心を揺さぶるものはこれです: テーブルの作成ではdbo、名前の前に明示的に指定されたスキーマがありませんでした。これにより、tableというdomain\cowork_id.table_name_hereテーブルが作成されました。彼の個人スキーマで作成されたテーブルに加えて、彼はデータベースにそのスキーマも持っています(プロシージャを実行する前は存在していませんでした)。 どうした?SQL Server dboが指定されていない場合ではなく、ユーザーのスキーマでテーブルを作成するのはなぜですか?

1
流出をtempdbにソートしますが、推定行は実際の行と等しくなります
最大メモリを25GBに設定したSQL Server 2016 SP2では、1分間に約80回実行されるクエリがあります。クエリにより、約4000ページがtempdbに流出します。これにより、tempdbのディスクで大量のIOが発生します。 あなたが見てとるときにクエリプラン(簡体クエリを)あなたは、推定行数は実際の行数と同じであるが、依然として発生こぼれることがわかります。したがって、古い統計が問題の原因になることはありません。 私はいくつかのテストを行い、次のクエリをTempdbにスピルしました。 select id --uniqueidentifier from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) しかし、別の列を選択した場合、流出は発生しません。 select startdate --datetime from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) そこで、id列のサイズを「拡大」しようとしました。 select CONVERT(nvarchar(512),id) from SortProblem where [status] ='A' order by SequenceNumber asc option …

2
一時テーブルは、熱心なスプールよりもハロウィーンの問題に対するより効率的なソリューションであるのはなぜですか?
行がターゲットテーブルにない場合にのみソーステーブルから行を挿入する次のクエリを検討してください。 INSERT INTO dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR WITH (TABLOCK) SELECT maybe_new_rows.ID FROM dbo.A_HEAP_OF_MOSTLY_NEW_ROWS maybe_new_rows WHERE NOT EXISTS ( SELECT 1 FROM dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR halloween WHERE maybe_new_rows.ID = halloween.ID ) OPTION (MAXDOP 1, QUERYTRACEON 7470); 考えられる1つの形状には、マージ結合と積極的なスプールが含まれます。ハロウィーンの問題を解決するために、熱心なスプールオペレーターがいます。 私のマシンでは、上記のコードは約6900ミリ秒で実行されます。テーブルを作成するための再現コードは、質問の下部に含まれています。パフォーマンスに不満がある場合は、熱心なスプールに頼るのではなく、一時テーブルに挿入される行をロードしようとするかもしれません。可能な実装の1つを次に示します。 DROP TABLE IF EXISTS #CONSULTANT_RECOMMENDED_TEMP_TABLE; CREATE TABLE #CONSULTANT_RECOMMENDED_TEMP_TABLE ( ID BIGINT, PRIMARY KEY (ID) ); INSERT INTO #CONSULTANT_RECOMMENDED_TEMP_TABLE …


2
10 TBのデータベースのバックアップ/復元に関する質問
10 TBの非常に大きな本番データベースがあります。クラウドサービスへの移行を検討していますが、リスクを理解し、プロセス全体の期間を見積もる必要があります。ネイティブSQL Server 2014 SP2バックアップソリューションを使用して、月に1回データベースをバックアップします。所要時間はほぼ720分-12時間です。圧縮率は5です。これは、バックアップサイズがほぼ2 TBであることを意味します。差分バックアップは累積されるため、フルバックアップと同じくらいの時間とスペースを要するため、1日あたり10分から144ファイルごとにT-logバックアップ(それぞれ200 Mb)を行うことはできません。BIGの質問はこれらすべての統計情報を持っていることです。10TBのデータを含む2 TBのバックアップを復元するのにどれくらい時間がかかるか、誰にもわかりませんか?完全バックアップの期間よりもはるかに長くなりますか?

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