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

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

3
SQL Server Insert Into-切り捨てエラーの原因となっている列を特定する方法
テーブルに650のフィールドを挿入するストアドプロシージャがあります。挿入は、切り捨てエラーで失敗します。 簡単です INSERT INTO SELECT (a bunch of fields) FROM (a bunch of tables) 以下はエラーメッセージです。 メッセージ8152、レベル16、状態14、プロシージャDSP_Procedure、行1075文字列またはバイナリデータは切り捨てられます。 切り捨てエラーの原因となっているフィールドを簡単に特定できる方法はありますか? テーブルに挿入される選択ステートメントに650のフィールドがあるため、どのフィールドが切り捨てエラーの原因であるかを正確に特定することが困難です。 一度に100個のフィールドのみを挿入するように、一度にフィールドのブロックをコメント化し、少なくとも100個のフィールドのグループに絞り込むことができるまで、SP 6または7の異なる時間を実行できると思います。切り捨てエラーの原因となっているフィールドが含まれます。 またはSELECT INTO、新しいテーブルを作成して、SPに挿入しようとしているターゲットテーブルのデータ長とテーブルのデータ長を比較して、どのフィールドに予想より長いフィールド長が含まれているかを確認できると考えています。 .. SQL Server 2014を使用しています。 より簡単な代替手段はありますか?

4
ストアドプロシージャを使用して日付範囲の毎日の行を作成する方法
特定の日付範囲の毎日のテーブルに行を作成するストアドプロシージャを作成したいと思います。ストアドプロシージャは、2つの入力(ユーザーが希望する日付範囲の開始日と終了日)を受け入れます。 それで、私がそのようなテーブルを持っているとしましょう: SELECT Day, Currency FROM ConversionTable DayはDateTimeであり、Currencyは単なる整数です。 話を簡単にするために、これらの挿入された行ごとにCurrency列を常に1にしたいとします。したがって、誰かが「2017年3月5日」を開始日として入力し、「2017年4月11日」を終了日として入力した場合、次の行を作成します。 2017-03-05 00:00:00, 1 2017-03-06 00:00:00, 1 ... 2017-04-11 00:00:00, 1 これを行うためにストアドプロシージャをコーディングする最良の方法は何ですか?私のテスト環境ではSQL Server 2008 R2を使用していますが、実際の環境ではSQL Server 2012を使用しているため、このタスクを容易にする新しい機能が2012年に導入された場合、テストマシンをアップグレードできます。

2
マスターデータベースが破損している、インスタンスが起動しない-私のオプションは何ですか?
助けて!マスターデータベースが破損しています。SQLインスタンスをオンラインにすることもできません。サーバーをバックアップするためのオプションは何ですか? マスターのバックアップはありますが、MSDNページの「Restoring the master Database」で、インスタンスをシングルユーザーモードで起動するように求められますが、それはできません! (注:この質問は、SQLバージョンに関しては未指定のままにしておきます。これは、より広く適用できる参照となるようにするためです。DBA.SEにも同様の質問がいくつかありますが、サーバーが起動できないことに関する質問はありません。)

5
クエリを実行するためにアクセスするデータベースサーバーにインストールされているデータベースエンジンを確認するにはどうすればよいですか?
アクセス可能なDatasaseサーバーで実行されているSQLのタイプを確認したい。Webインターフェースとテーブルのリストにしかアクセスできません。 インターフェイスを介して、リストにあるテーブルに対してクエリを実行できます。 サーバーとサーバーが実行しているバージョンに関する詳細情報を取得するにはどうすればよいですか。サーバーが実行しているIPまたはポートについてはわかりません。 サーバーがMySQL、Mircosoft SQLサーバー、Oracle SQL、Postgre SQL、またはその他のSQLサーバーかどうかを知りたい。 私が話しているWebサイトは、 w3schools.com SQLエディターです。 編集2:一部のコマンドselect sqlite_version()は私にとっては機能しますが、機能しません。これは応答のスクリーンショットです。 編集3:Chromiumブラウザでは、コマンドは正しく機能しています。ただし、Firefoxブラウザーではコマンドは機能しませんでした。 また、私はLinuxを実行していることも述べました。 FirefoxとChromeで異なる結果が得られる理由は何だと思いますか?

1
SQL Serverの統計のデフォルトのサンプルサイズは何ですか?
MSDNから: サンプルオプション(SAMPLE, FULLSCAN, RESAMPLE)が指定されていない場合、クエリオプティマイザーはデータをサンプリングし、デフォルトでサンプルサイズを計算します。 統計のデフォルトのサンプルサイズを特定するにはどうすればよいですか? MSDNを調べましたが、デフォルトのサンプルサイズを特定するための式や方法が見つかりませんでした。どこにも、自動統計更新をトリガーするための数式しかありません。どんなポインタも役に立ちます。

1
UPDATE STATISTICS…ROWCOUNTを使用した後に統計をリセットする方法
クエリのチューニングとテストの目的で、を実行して、行数とページ数をテーブルのインデックス統計に手動で割り当てることができますUPDATE STATISTICS。しかし、統計をテーブルの実際の内容に再計算/リセットするにはどうすればよいでしょうか。 --- Create a table.. CREATE TABLE dbo.StatTest ( i int NOT NULL, CONSTRAINT PK_StatTest PRIMARY KEY CLUSTERED (i) ); GO --- .. and give it a thousand-or-so rows: DECLARE @i int=1; INSERT INTO dbo.StatTest (i) VALUES (@i); WHILE (@i<1000) BEGIN; INSERT INTO dbo.StatTest (i) SELECT @i+i FROM dbo.StatTest; …

2
未使用のインデックスのベストプラクティス
このクエリに基づいて、総読み取り数が少ない(1または2のように0または0に非常に近い)と、大量または中程度のユーザー更新(このクエリで挿入または削除が見つからなかった)が行数が多い場合、理論的にはインデックスを削除する必要があります。 SELECT DISTINCT OBJECT_NAME(s.[object_id]) AS ObjectName , p.rows TableRows , i.name AS [INDEX NAME] , (user_seeks + user_scans + user_lookups) AS TotalReads , user_updates UserUpdates FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON i.[object_id] = s.[object_id] AND i.index_id = s.index_id INNER JOIN sys.partitions p ON p.object_id = i.object_id WHERE OBJECTPROPERTY(s.[object_id],'IsUserTable') …

6
個別の行としてではなく、1つの行の1つのフィールドに複数の値を格納することの利点
前回の毎週の会議中に、データベース管理のバックグラウンド経験がない人がこの質問を持ち出しました。 「データを複数行ではなくインライン(文字列)に保存することを正当化するシナリオはありますか?」 countryStates国の州を保存する場所と呼ばれるテーブルがあるとします。この例では米国を使用します。怠惰にするためにすべての国をリストすることはしません。 そこには2つの列があります。1つが呼び出さCountryれ、もう1つが呼び出されましたStates。ここで説明し、@ srutzkyの回答で提案されているように、これはISO 3166-1 alpha-3でPK定義されたコードになります。 テーブルは次のようになります。 +---------+-----------------------+-------------------------------------------------------+ | Country | States | StateName | +---------+-----------------------+-------------------------------------------------------+ | USA | AL, CA, FL,OH, NY, WY | Alabama, California, Florida, Ohio, New York, Wyoming | +---------+-----------------------+-------------------------------------------------------+ この同じ質問を友人の開発者に尋ねたところ、データトラフィックサイズの観点からは、これは役立つかもしれませんが、このデータを操作する必要がある場合はそうではないと述べました。この場合、リスト内のこの文字列を変換できるアプリケーションコードにインテリジェンスが必要です(このテーブルにアクセスできるソフトウェアがコンボボックスを作成する必要があるとしましょう)。 このモデルはあまり有用ではないと結論付けましたが、これを有効にする方法があるのではないかと疑いました。 私が聞きたいのは、実際に機能する方法で、このようなことをすでに見たり聞いたりしたりしていないかどうかです。

3
カーディナリティの推定値が低いと、INSERTは最小限のログから除外されますか?
2番目のINSERTステートメントが最初のステートメントより〜5倍遅いのはなぜですか? 生成されたログデータの量から、2番目のログは最小限のログ記録に適していないと思います。ただし、データ読み込みパフォーマンスガイドのドキュメントには、両方の挿入を最小限に記録できることが示されています。では、最小限のロギングが主要なパフォーマンスの違いである場合、2番目のクエリが最小限のロギングに適格ではないのはなぜですか?状況を改善するために何ができますか? クエリ#1:INSERT ... WITH(TABLOCK)を使用して5MM行を挿入する 5MM行をヒープに挿入する次のクエリを考えてみます。このクエリは、によって報告されるトランザクションログデータで実行1 secondおよび生成64MBされsys.dm_tran_database_transactionsます。 CREATE TABLE dbo.minimalLoggingTest (n INT NOT NULL) GO INSERT INTO dbo.minimalLoggingTest WITH (TABLOCK) (n) SELECT n -- Any table/view/sub-query that correctly estimates that it will generate 5MM rows FROM dbo.fiveMillionNumbers -- Provides greater consistency on my laptop, where other processes are running OPTION …

3
SSDTのように、SSMSでsqlcmdモードの:rを使用して現在のスクリプトの相対パスを使用するにはどうすればよいですか?
同じフォルダにfoo.sqlとbar.sqlがある場合、SSSDからsqlcmdモードでを実行すると、foo.sqlはbar.sqlを参照できます:r ".\bar.sql"。ただし、SSMSはそれを検出しません。Procmonは、SSMSが探していることを示しています%systemroot%\syswow64。 パスを明示的に宣言せずに、現在のスクリプトが保存されているフォルダーを検索するようにSSMSに指示するにはどうすればよいですか?
11 sql-server  ssms  sqlcmd  ssdt 

4
PRIMARY KEYまたはUNIQUE列としてのNVARCHAR列
SQL Server 2012データベースを開発していますが、主キーとしてのnvarchar列に疑問があります。 私はこのテーブルを持っています: CREATE TABLE [dbo].[CODES] ( [ID_CODE] [bigint] IDENTITY(1,1) NOT NULL, [CODE_LEVEL] [tinyint] NOT NULL, [CODE] [nvarchar](20) NOT NULL, [FLAG] [tinyint] NOT NULL, [IS_TRANSMITTED] [bit] NOT NULL DEFAULT 0, CONSTRAINT [PK_CODES] PRIMARY KEY CLUSTERED ( [CODE_LEVEL] ASC, [CODE] ASC ) ) しかし、今私は[CODE]列を主キーとして使用し、列を削除したいと思い[ID_CODE]ます。 NVARCHARとして列がある場合、問題やペナルティはありますPRIMARY KEYか? [CODE]列の値は一意でなければならないので、UNIQUEその列に制約を設定できると思っていました。 [CODE]主キーとして使用する必要がありますか、それとも列にUNIQUE制約を設定した方が良い[CODE]ですか?

1
ストアドプロシージャの実行を許可し、書き込みを許可しない方法は?
SQL Server 2012インスタンスに「読み取り」ユーザーを設定したいのですが。すべてのテーブルとビューからデータを取得するストアドプロシージャ、関数、またはダイレクトSQLステートメントを実行する権利を許可しますが、更新または挿入(つまり、何も読み取らず、何も書き込まない)は許可しません。 名前で各関数またはストアドプロシージャに特別な権限を付与せずにこれを設定できますが、テーブルを変更する権限を取り除いて、関数またはストアドプロシージャの実行権を彼に付与できますか? 代わりにSQL Server 2008を実行すると何が変わりますか? 説明と追加: ストアドプロシージャがデータを変更した場合、ユーザーはエラーメッセージを受け取ります(変更を拒否するか、ストアドプロシージャへのアクセスを完全に拒否します)。 潜在的なソリューションにアクセス許可の拒否が含まれている場合、拒否する代わりに特定のアクセス許可を付与することはできませんか? データベース内のすべてのテーブル、ビューなど(現在および将来存在する)に1つのステートメントで拒否を適用できますか?

5
大量(8400万行)のデータを効率的に転送
約8400万行あります。それらのすべてを同じサーバー上の別のデータベースに転送する必要があるので、ソースデータベースから約6000万行を削除するために削除します。 8,400万行はすべて同じテーブルにあります。そのテーブルだけでデータベース全体の90%を占めています。 つまり...ソース:8,400万行-> 2,400万行宛先:0行-> 8,400万行 ソースは完全復旧モードを実行しており、デスティネーションは単純に実行されます。 これを行う最も効率的な方法は何でしょうか? プランA: 1)挿入先に選択SELECT * FROMソース 2)切り捨てソース 3)ソースSELECT * FROM宛先WHERE keep_condition = 1に挿入 次の手段: 1)ソースデータベースのバックアップを宛先データベースとして復元します 2)宛先データベースで必要なテーブルを除くすべてのテーブルを削除します 3)TRUNCATEソース 4)INSERT INTO source SELECT * FROM destination WHERE keep_condition = 1に挿入します プランC: 1)挿入先に選択SELECT * FROMソース 2)DELETEソースWHERE keep_condition = 0 または、他の何か? ありがとう
11 sql-server 

2
MS SQL Serverの累積的な更新-ベストプラクティス
SQL Serverの累積的な更新の推奨されるベストプラクティスを理解しようとしています。 現在、「CUによって修正された問題が発生した問題でない限り、何もしない」という考えに基づいています。これは「壊れていない場合は修正しない」というアプローチで機能しますが、多くのCUにはパフォーマンスが強化されているので、それが本当に良いアイデアかどうか疑問に思っています。CUがリリースされてから1〜2か月後の定期メンテナンスサイクル中に適用されるパッチに、CUを追加することを検討しています。 他の人は何をしますか、そしてなぜですか? 以下の回答に影響する質問に対する更新として、2016年3月24日、MicrosoftのSQL Serverチームは、サービスモデルを更新すると発表しました。マイクロソフトは、すべてのユーザーが2016年1月以降にリリースされたすべてのCUをインストールすることを推奨しています。 CUの1月のリリース以降、これらの警告メッセージが更新されました。CUが利用可能になったときに、CUを継続的かつ事前にインストールすることをお勧めします。CUのインストールは、SP(サービスパック)がリリースされるときにインストールするのと同じレベルの信頼度で行う必要があります。これは、CUがSPのレベルで認定およびテストされているためです。また、Microsoft CSSデータは、顧客の問題のかなりの部分が、リリースされたCUで以前に対処されていることが多いが、積極的に適用されていないことを示しています。さらに、CUにはホットフィックス以上の付加価値が含まれています。これらには、サポート性、ロギング、信頼性の更新も含まれ、全体的なエクスペリエンスが向上します。 メッセージングとガイダンスの更新に加えて、CU取得モデルも更新しました。 取得の変更: もちろん、CUは従来から「Hotfix」サーバーで利用可能になっています(「QFE」または「Hotfix」に関連付けられた「警告言語」を伴う)。ここでの不整合は、CUが本当に単純なクイックホットフィックスではなくなったことです。含まれている更新プログラムは、今日の個人および完全なシステム統合レベルで十分にテストされています。 したがって、現在サービスパックで行われているのと同様に、メインストリームでサポートされているベースラインごとに最新のCU(2012 SP2 / SP3および2014 RTM / SP1今日)をmicrosoft.com/downloadsに配置しています。 さらに、取得と配布を容易にするために、すべてのCUをすぐにWindows Updateカタログにリリースして保守します。 暫定CUの「オンデマンド」修正のみがホットフィックスサーバーに配置されます。 摩擦を減らすために、microsoft.com / downloadsからCUをダウンロードする際に、電子メールとURLを提供/受信する必要はありません 現在のサービスパックと同様に、最新のCUをMicrosoft Updateのオプションの更新として提供することも評価しています
11 sql-server 

1
IDENTITY_INSERTは並行性にどのように影響しますか?
投稿に不具合があり、サポートが終了したサードパーティのSAPアドオンを使用してお客様を支援しようとしています。 特定の状況下では、投稿キューテーブルから投稿アーカイブテーブルへの不完全な投稿をアーカイブします。これらのアーカイブされた結果をキューに戻す必要があります。 キューIDはID列であり、同じにしたいと思います。 問題は、identity_insertをオン/挿入/ identity_insertオフにすると、キューエントリを作成し、ID列が自動的に生成されることを期待するプロセスとの同時実行性に関して何が期待できるでしょうか。 そのような振る舞いを実証するための最良の方法へのポインタも同様に大歓迎です。

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