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

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

1
グローバルレベルの一時テーブルでは論理読み取り、セッションレベルの一時テーブルでは読み取り不可
次の単純なMCVEについて考えてみます。 SET STATISTICS IO, TIME OFF; USE tempdb; IF OBJECT_ID(N'tempdb..#t1', N'U') IS NOT NULL DROP TABLE #t1; CREATE TABLE #t1 ( r int NOT NULL ); IF OBJECT_ID(N'tempdb..##t1', N'U') IS NOT NULL DROP TABLE ##t1; CREATE TABLE ##t1 ( r int NOT NULL ); IF OBJECT_ID(N'dbo.s1', N'U') IS NOT NULL …

1
結合とウィンドウ関数を使用してリード値とラグ値を取得するパフォーマンスの比較
私は20Mの行のテーブルを有し、各行は3つの列を有している:time、id、およびvalue。それぞれについてidとtime、そこにあるvalue状態のため。time特定の特定の特定のリードとラグの値を知りたいid。 これを達成するために2つの方法を使用しました。1つの方法は結合を使用し、もう1つの方法は、クラスター化インデックスがオンtimeおよびのウィンドウ関数lead / lagを使用することidです。 これら2つの方法のパフォーマンスを実行時間で比較しました。結合メソッドは16.3秒かかり、ウィンドウ関数メソッドは20秒かかります(インデックスの作成時間は含まれません)。結合メソッドがブルートフォースであるときにウィンドウ関数が進んでいるように見えるので、これは私を驚かせました。 2つのメソッドのコードは次のとおりです。 インデックスを作成 create clustered index id_time on tab1 (id,time) 結合方法 select a1.id,a1.time a1.value as value, b1.value as value_lag, c1.value as value_lead into tab2 from tab1 a1 left join tab1 b1 on a1.id = b1.id and a1.time-1= b1.time left join tab1 c1 on a1.id = c1.id …

6
セッションが強制終了状態のため、実行を続行できません。クラスター化インデックスの構築中
クラスタ化インデックスを作成しようとすると、次のエラーが発生します ステートメントは終了されました。 メッセージ596、レベル21、状態1、行0 セッションが強制終了状態のため、実行を続行できません。 メッセージ0、レベル20、状態0、行0 現在のコマンドで重大なエラーが発生しました。結果がある場合は、破棄する必要があります。 インデックスは次のとおりです。 BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON COMMIT BEGIN TRANSACTION GO CREATE CLUSTERED INDEX IX_CO_DES_INPUT ON dbo.CO_DES_INPUT(DESIGN_ID, PRODUCT_INPUT_NUM, INPUT_NAME) WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = …


3
WITH CTEとWITH CTE(<column_names>)の違いは何ですか?
MSDNの共通テーブル式の使用に示すように、CTEを次のように定義できます。 WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_query_definition ) そしてそれを次のように使用します: SELECT &lt;column_list&gt; FROM expression_name; 次の2つのCTEがあるとします with cte1 as( select name from Table1 ) with cte2(name) as( select name from Table1 ) クエリは、内部クエリが同じであるため、両方のCTEに対して同じ結果を出力します。これら2つの違いは、cte2の(name)宣言で列名()が定義されていることだけです。 両方のCTEを実行しても、実行計画に違いはありません。 私は知りたいだけです: CTE定義で列名を指定しない場合、どのような違いがありますか? CTEの作成時に列名を指定する必要がある/すべきではないのはなぜですか? 万が一クエリ実行プランに影響はありますか?(私が見た限りでは、何の違いもありません。)

6
MS SQL Serverで混乱したレプリケーションを修正する方法
バックアップからデータベースを復元しました。データベースはレプリケーションを使用して別のサーバーに公開します。データベースを復元するとレプリケーションが壊れると想定して、レプリケーションを削除して再作成しようとしました(ゼロから再作成するスクリプトがあります)。私が何をしたか正確にはわかりませんが、今は完全にめちゃくちゃな状態にあり、修正できません。 最初に、(パブリッシャーサーバー上の)サブスクリプションを削除しようとします。 EXEC sp_dropsubscription @publication = 'PublicationName', @article = N'all', @subscriber = 'SubscriberServerName' これは動作するようです。SELECT * FROM syssubscriptions結果は表示されません。サブスクライバーサーバーでSSMS&gt; {SubscriberServer}&gt;レプリケーション&gt;ローカルサブスクリプション-サブスクリプションがありません。 それで、私は出版物を削除しようとします。SSMS&gt; {サーバー}&gt;レプリケーション&gt;ローカルパブリケーション&gt; {PublicationName}&gt;削除。これにより、次のエラーメッセージが表示されます。 Could not delete publication 'PublicationName'. Could not drop article. A subscription exists on it. Changed database context to 'DatabaseName'. (Microsoft SQL Server, Error: 14046) OK、それで私は記事を落とそうとします: EXEC sp_droparticle @publication = …

4
複数の異なる型である可能性のある値を格納する適切な方法
私が持っている回答のテーブルと質問表を。 回答のテーブルには、値を持っていますが、問題によっては、この値は以下のようになりbit、nvarcharまたはnumber(今のところ)。質問は、その意図した回答値の型がどうあるべきかという概念を持っています。 少なくとも数値を比較する必要があるため、これらのAnswer値をどこかで解析することが重要です。 もう少しコンテキストについては、質問と潜在的な回答(通常、テキストボックスタイプの入力に許可されているデータタイプ)は、ソートの調査で一部のユーザーによって提供されます。その後、指定された他のユーザーが回答を提供します。 私が検討したいくつかのオプションは次のとおりです。 A.目的のタイプに応じて異なる方法で解析されるXMLまたは文字列(質問で追跡されます) B. Answerテーブルを参照する(またはAnswerテーブルによって参照される)3つの個別のテーブル。意図されたタイプに基づいて結合されます。この場合、各質問の回答が1つだけになるように制約を設定する最善の方法、またはそれをアプリケーションに任せる必要があるかどうかはわかりません。 C.目的のタイプに基づいて取得できるAnswerテーブルの3つの個別の列。 私はこれらのアプローチの長所と短所、または私が考慮していなかった代替のアプローチについていくつかの情報を得ていただければ幸いです。

3
VS DBプロジェクトとしてインポートした後の「ユーザーへの未解決の参照」
既存のSQL Server 2008r2運用データベースをVS 2013データベースプロジェクトにインポートしました。 私は今の線に沿っていくつかのエラーを取得します Error SQL71501: User: [mydbuser] has an unresolved reference to Login [mydbuser]. ユーザーを管理するためにVS DBプロジェクトは本当に必要ありませんが、ユーザーがそこにいない場合、展開時にそれらを削除しようとするのではないかと心配しています。 ファイル自体は次のように生成されます CREATE USER [mydbuser] FOR LOGIN [mydbuser]; または CREATE USER [mydomainuser] FOR LOGIN [MYDOMAIN\mydomainuser]; エラーマーカーは、それがログイン専用であることを示しています。これはシステムレベルのオブジェクトなので、dbプロジェクトのスコープ外であることは理解できます。 すべてを次のように変更することが好ましいですか? CREATE USER [mydbuser] WITHOUT LOGIN; またはCREATE LOGIN、各ファイルの先頭に句を追加しますか? ログイン参照を削除する方が簡単で、ユーザーを完全に削除する方が簡単です。 ツールが意図したとおりに使用されていることを確認したい。それらを本番環境に再公開する際に問題はありますか?プロジェクトを介してユーザー/ログインを追加する適切な手順は何ですか?


5
DELETEステートメントがREFERENCE制約と競合しました
すべてのユーザーを削除しようとしていますが、エラーが発生します。 Msg 547, Level 16, State 0, Line 1 The DELETE statement conflicted with the REFERENCE constraint "FK_M02ArticlePersons_M06Persons". The conflict occurred in database "workdemo.no", table "dbo.M02ArticlePersons", column 'M06PersonId'. The statement has been terminated. クエリ: DELETE FROM [workdemo.no].[dbo].[M06Persons] WHERE ID &gt; '13' GO 使用する必要on delete cascade;があるようですが、行き詰まっています。
11 sql-server  t-sql 

1
DMV sys.dm_exec_query_statsのlast_worker_timeとlast_elapsed_timeの違いは何ですか?
DMV sys.dm_exec_query_statsのlast_worker_timeとlast_elapsed_timeの意味は何ですか?それらの違いは何ですか? クエリの下で起動したとき SELECT TOP 20 qs.last_worker_time, qs.last_worker_time/1000000 last_worker_time_in_S, qs.last_elapsed_time, qs.last_elapsed_time/1000000 last_elapsed_time_in_S FROM sys.dm_exec_query_stats qs order by qs.last_worker_time desc 以下のような結果になります。 私が気づいたのは、両方が等しいか、経過時間がワーカー時間よりも長いことです。両方の意味を理解したいので、パフォーマンスのチューニングにも役立ちます。

6
データベース2の論理ページ(5:65424)をフェッチしようとして失敗しました
SqlExceptionストアドプロシージャを呼び出すと、次のようになります。 データベース2の論理ページ(5:65424)をフェッチしようとして失敗しました。これは、4899918190390149120ではなく、アロケーションユニット7349876362857938944に属しています。 System.Data.SqlClient.SqlExceptionが発生しました Message = "データベース2の論理ページ(5:65424)をフェッチしようとしましたが失敗しました。これは4899918190390149120ではなく、割り当てユニット7349876362857938944に属しています。 Source = " 。Net SqlClient Data Provider" ErrorCode = -2146232060 Class = 21 LineNumber = 257 Number = 605 Procedure = "ispDisplayCount" Server = "10.10.1.1" State = 3 この例外はどういう意味ですか?上記の問題に対する解決策はありますか? 上記のエラーで参照されているデータベースはtempdbを示していますが、メッセージ605を参照する同様のエラーは、以下の回答を使用して修正できます。 メッセージ605、レベル21、状態3、行1 データベース7の論理ページ(1:8687634)をフェッチしようとして失敗しました。これは、72057594052476928ではなく、割り当てユニット72057594364821504に属しています。

5
バックアップ後に復元されたユーザー権限->復元操作
いくつかのSQL Server 2008データベースを新しいdbサーバーに移動して、それらすべてを(.bakファイルに)バックアップし、これらのファイルを新しいボックスにコピーして復元しました(すべてSQL Management Studioを使用して行いました)。 すべて問題なく動作しましたが、古いRDBMSで引き続き動作するSQL Serverアカウントを使用して、どのデータベースにもログインできません。私のWindows認証ログインは、ついでに問題なく動作します。 ユーザーと権限はすべてシームレスに新しいデータベースサーバーに複製されるという考えがありましたが、どこかで問題が発生しているようです。コメント/提案/ヘルプの提供をお願いします;-)

3
大文字と小文字を区別するデータベースで大文字と小文字を区別しないLIKEを行う方法
私のベンダーでは、データウェアハウスデータベースで大文字と小文字を区別する必要がありますが、それに対して大文字と小文字を区別しないクエリを実行する必要があります。 大文字と小文字を区別するデータベースで、大文字と小文字を区別しないようにこれをどのように記述しますか? Where Name like '%hospitalist%'

3
カスケード削除を避けるべき時期はありますか?
SQL Server 2008には、1対多の関係で他の3つの子テーブルにリンクされているプラ​​イマリテーブルがあります。したがって、プライマリテーブルでカスケード削除を使用して、プライマリテーブルのレコードが削除されると子テーブルのすべてのレコードが削除されるようにすることを検討しています。 では、カスケードは正しい選択をここで削除しますか? カスケードdeteleを使用しない場合

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