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

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

4
2つの異なるスキーマ間のデータ比較を実行するツールはありますか?
データベースを新しいスキーマに移行していますが、データが正しく移動されたことを確認したいと考えています。 スキーマが同じ場合、従来のデータ比較ツールは2つのデータベースの違いを比較できます。今回のケースでは、テーブルのデザインに変更がありましたが、古いスキーマのすべてのデータは新しいスキーマにあり、少し移動されただけなので、正しいことを確認する必要があります。数千万行あるため、手動で検査することはできません。 このタイプの比較に役立つツールはありますか? カスタムソリューションの開発を始めるのに役立つライブラリ/フレームワークがない場合はどうなりますか? 必要に応じて、データベース固有のソリューションを使用できます。この場合は、SQL Server 2008です。 私の解決策:VIEW新しいデータベーステーブルと同じフィールドを持つ古いデータベースに各テーブルのを作成して、2つのデータセットを比較しています。 次に、ここで説明する手法を使用してデータを比較します。SQLServerの2つのテーブルを比較するための最短、最速、最も簡単な方法:UNION! 全体的なテーブル構造は古いデータベースに似ており、フィールドが1つのテーブルから別のテーブルに移動、削除、または追加されているので、この移行で私は幸運です。ドロップして追加した場合、比較するものは何もありません。移動または集計されたフィールドについては、比較のために正しい情報を提供するためにビューで計算を行います。 UNION比較を示してくれ差がある行のみが、そうとすぐにデータが正確であるように私は、空の結果セットを取得します。

5
デッドロックを監視する方法
SQL Server 2005/2008のデッドロックのトラブルシューティングを開始する時期と方法は?アラートは、SQL Serverのパフォーマンス条件アラート、オブジェクト-> SQLServer:Locks、カウンター->ロック待機/秒、インスタンス:_Total、カウンターが値を超えた場合にアラートを介してSSMSでオンになります。これは、予防的な監視方法ですか?許容値は何ですか?よろしくお願いします。ありがとうございました!!!

2
非DBAからの質問:SQL Serverインスタンスをバックアップ/復元を介して別のサーバーに簡単にコピー/移動する方法は?
新しいサーバーができたので、既存のSQL Server 2008インスタンスを古いdbボックスからコピーする必要があります。 私は通常、.mdfとログファイルをコピーしてそれらを添付することでこれを行いますが、データベースを24時間年中無休で使用しているため、データベースをオフラインにできないため、データベースをバックアップし、新しいデータベースに復元しました機械。しかし、私はいくつかの問題を抱えており、そのうちの1つは孤立したユーザーに関連しています。だから私が探しているのは、すべてを最小限の手間/母/頭痛で動かすフェイルセーフプロセスです。私は.Net開発者であり、かなりの量のSQLを身につけていますが、SQL Serverの内部の仕組みはほとんど謎であり、MSのドキュメントはトロールするのに苦労します。 助けてください。

1
SQL Server 2008 R2ダーティリード-どのように非アトミックですか?
「ダーティ」なダーティリードが、コミットされていない読み取りの分離レベルに達する可能性があるのではないかと思っています。更新されたがまだコミットされていない行が表示されることを理解していますが、 行は部分的に更新されたように見えますか?つまり、一部の列は更新され、一部は更新されていませんか? 1つの列が部分的に更新されたように見えますか?たとえば、完全に更新中のvarchar(4000)列があり、実際には4000文字が含まれていると想定しているとします。前の状態の2k文字と新しい状態の2k文字を読み取ることができますか?長さが> 8kのvarchar(max)はどうですか? 更新:ある程度の議論の後、最小限のコンセンサスは、列のサイズが> 8KBの場合、たとえ列自体の中であってもダーティリードが可能であるということです。

8
一意のIDを明示的に生成するID列またはUDF?
私は、一意のIDを明示的に生成するUDFからPRIMARY KEY、Identity Columnsを使用する方が良いかどうかについて議論しています。 Identity列について議論しています。 私のパートナーは、手動で値を生成することを主張しています、と彼は主張します UDFを作成できる別のテーブルにUDFを配置する リソースをロックする ID_Valueによって呼び出される1つのフィールドでIDテーブルをインクリメントする1 これをグローバル一意識別子として使用します またはid+1、挿入時にテーブルに 識別制約のないサーバーや環境間でデータを移動する方が簡単です。データがあるDBから、ステージングデータやダミーデータなどの別の類似のDBに移動する。非本番環境でのテストでは、すべてのレコードを昨日からテスト用のステージングまで引き下げたい場合があります。 どの実装がより意味がありますか?

1
SELECTステートメントの各行に異なるランダムな値を割り当てるにはどうすればよいですか?
このコードを見てください: create table #t1( id int identity (1,1), val varchar(10) ); insert into #t1 values ('a'); insert into #t1 values ('b'); insert into #t1 values ('c'); insert into #t1 values ('d'); 今、これを実行するたびに select *, ( select top 1 val from #t1 order by NEWID()) rnd from #t1 order by 1; …

5
SQL Serverコマンドラインの使用法 出来ますか?
私はSQL Server Management Studio 2008に組み込まれている「ソリューションエクスプローラー」を使用してプロジェクトを管理しようとしていましたが、2週間の苦労の末、本当に気にしないと判断しました。「便利」な機能は実際にはかなり邪魔です。 残念ながら、私が働いている場所はMSショップであり、かなり行き詰まっています。コマンドラインに戻りたい(Vimを切望している!)。上記の「ソリューションエクスプローラー」を置き換えるために、TortiseSVNフロントエンドを使用してローカルのSubversionリポジトリをインストールし、非常にうまく動作させています。私はVimもインストールし、それをカスタマイズする作業をしながら、ハミングしています。 ただし、まだ解決策を見つけていないのは、コマンドラインからSQL Serverに対してコマンドを実行する方法です。私はMySQL / Postgresコマンドラインプロンプトに慣れています。これは、私が過去に使用したものであり、クラスの処理中に使用していたためです。しかし、Windowsのコマンドラインからスクリプトを実行する方法が見つからないようです。現在、Vimで編集し、SSMSでページを更新して実行しています。必要な場合を除いて、SMSSには触れない方がよいと思います。 sqlsharpを提案する投稿を見たことがありますが、ページに移動したときに、探しているものとはまったく違う感じがします。 -編集 2つの解答チェックマークを付けることができたことを本当に願っています。P.キャンベルには技術的に正しい答えがあり、何度か試してみました(sqlcmdを試すとエラーが発生し続けます...名前付きパイプがどのように動作しているのかを調査しているのですが...設定しても有効にすると、動作しないようです。) それを試しても成功しなかった後、Management Studioにコピーして貼り付けるだけの方法を試しましたが、それはばかげていました...だから、おそらくHardCodeも正しいと判断しました。

5
SQL Serverで適切な電話番号が設定されていないレコードの数を確認する最良の方法は何ですか?
私は歴史的に人々が自由に価値を提供するために使用できる分野を持っています。適切な値を持たないレコードを特定して、クリーニングできるようにする必要があります。 私はこのためにSSISを見回してきました。私の傾向は、いくつかのC#コードで正規表現を使用してスクリプトコンポーネントを使用し、その後リダイレクトすることです。それでも、C#に頼らずにこれを行う方法がSSISにあるかどうか疑問に思っていました。 適切な電話番号が記録されていないレコードの数を調べる方法を見つけるのに、あまり運がありませんでした。

2
SQL 2008 Web Editionの「大きすぎる」サイズはどれくらいですか?
間もなくホストされるアプリケーションでは、SQL Server 2008 WebエディションとSQL Server 2008 Enterpriseエディションのどちらかを選択する必要があります。「必須」機能はありません。アプリケーションは現在SQL Expressで実行されていますが、SQL Expressが課す最大サイズの10 GBを超えます。 この比較表と、このページの「スケーラビリティとパフォーマンス」で最も重要な表を見ています。テーブルが大きくなるにつれて、「テーブルとインデックスのパーティション分割」などの機能は、パフォーマンスの速度を保証するために不可欠になります。しかし、これはどのテーブルサイズで必要ですか? データベースのサイズと使用にEnterprise Editionのスケーラビリティとパフォーマンス機能が必要かどうかを判断するには、どの戦略を使用する必要がありますか?

1
いつDBCC CLEANTABLEを実行してスペースを再利用する必要があるかを判断する信頼できる方法はありますか?
最近、ファイル使用率が80%に近づいたときにファイルを単に成長させるのではなく、ヒープのデフラグ、クラスター化インデックスの追加と削除、行またはページの圧縮などの通常のトリックを介してスペースを再利用することに積極的に取り組んできました。 ただし、DBCC CLEANTABLEを実行してさらに多くのスペースを取り戻すことができたケースがいくつかあります。私の環境には数百のデータベースがあるため、ユーザーがそれぞれのデータベースで何をしているのかを知ることは不可能であり、固定長の列の削除に関連する変更があることは完全に許容できます。私が書いたオブジェクトスペース使用率スクリプトの行数とページ数を比較することで、これらの機会を見つけました。このようなシナリオの検出を自動化することで、これをさらに一歩進めたいと思います。 私が知りたいのは、このような機会を積極的に監視している人がいるなら、そうだとしたら、具体的に何を探しますか? 私の考えは、行の最大サイズと最小サイズ、テーブルの行数、割り当てられたページ数、および使用されたページ数を収集するという線に沿って何かを記述し、いくつかの基本的な計算を行って結果を記録することでした「期待される」はずの外にあります。

2
SQL Server機能を使用して、番号で区別されたストアドプロシージャのグループを作成する人はいますか?
質問は、このmsdnドキュメントの数値パラメーターを参照しています そうでない場合は、SQL Serverで複数のストアドプロシージャを番号で区別して作成し、1回のドロップでドロップできます。 create procedure dbo.stored_proc1 as select 1 go create procedure dbo.stored_proc1;2 as select 2 go exec stored_proc1 -- returns 1 go exec stored_proc1;2 -- returns 2 go drop stored_proc1 -- drops both go この機能は誰かが何か役に立つものに使用しているのか、それとも単なる歴史的な好奇心なのか。

3
オプティマイザが非クラスタ化インデックスの代わりにクラスタ化インデックス+ソートを選択するのはなぜですか?
次の例を考えてみましょう: IF OBJECT_ID('dbo.my_table') IS NOT NULL DROP TABLE [dbo].[my_table]; GO CREATE TABLE [dbo].[my_table] ( [id] int IDENTITY (1,1) NOT NULL PRIMARY KEY, [foo] int NULL, [bar] int NULL, [nki] int NOT NULL ); GO /* Insert some random data */ INSERT INTO [dbo].[my_table] (foo, bar, nki) SELECT TOP (100000) ABS(CHECKSUM(NewId())) …

2
SQL Server 2019で「nvarchar / nchar」が使用されるのはいつですか?
SQL Serverの2019 Microsoftが紹介してUTF-8サポート用CHARとVARCHARデータ型をと言います: この機能により、使用中の文字セットによっては、ストレージを大幅に節約できる場合があります。たとえば、UTF-8対応の照合を使用して、ASCII文字列を含む既存の列データ型をNCHAR(10)からCHAR(10)に変更すると、ストレージ要件が約50%削減されます。この削減は、NCHAR(10)がストレージに22バイトを必要とするのに対し、CHAR(10)は同じUnicode文字列に12バイトを必要とするためです。 UTF-8は、ように見えるサポートので、基本的に私たちがUnicodeデータを格納し始めることができ、すべてのスクリプトをvarcharしてchar列。また、ドキュメントで述べられているように、これによりテーブルとインデックスのサイズを削減でき、そこから読み取るデータの量が少ないため、パフォーマンスがさらに向上します。 これは、UTF-16を実装する列nvarcharとnchar列の使用を停止できることを意味しているのでしょうか。 誰かがシナリオと理由を指摘できますUTFか?エンコーディングでcharデータ型を使用せず、n-chars データ型を引き続き使用しますか?

1
ユーザー `dbo`とsys.databasesに保存されているデータベースの所有者の違いは何ですか
最近dbo、データベースのユーザーがとsid一致しないを持っている場所に質問がありowner_sidましたsys.databases。データベースの所有者がロールのメンバーとどのように異なるかを理解していますがdb_owner、ユーザーdboがデータベースの実際の所有者であるといつも思っていました。そうではありませんか?そして、もしそうならdbo、何が入っているのsys.databasesか、何が本当の違いがあるのですか?

2
TSQLを使用してデータベースを動的に変更する方法
SSMSのコンテキストを動的SQLで指定されたデータベースに動的に変更しようとすると問題が発生します。 EXEC sys.sp_executesql N'USE db1 ' ; 正常に実行されますが、SSMSのデータベースコンテキストは変更されません。 上記のように少し変更してみました DECLARE @sql NVARCHAR(100) DECLARE @db NVARCHAR(50) SET @db = N'db1' SET @sql = N'Use ' + @db EXEC sp_executesql @sql 繰り返しになりますが、正常に実行されますが、データベースは変更されません。

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