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

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

2
シークできない永続化計算列のインデックス
という名前のテーブルがありAddress、そのテーブルには、という永続的な計算列がありHashkeyます。列は確定的ですが、正確ではありません。シークできない一意のインデックスがあります。このクエリを実行すると、主キーが返されます。 SELECT @ADDRESSID= ISNULL(AddressId,0) FROM dbo.[Address] WHERE HashKey = @HashKey 私はこの計画を取得します: インデックスを強制すると、さらに悪い計画が得られます。 インデックスとシークの両方を強制しようとすると、エラーが発生します。 このクエリで定義されたヒントのため、クエリプロセッサはクエリプランを作成できませんでした。ヒントを指定せずに、使用せずにクエリを再送信しますSET FORCEPLAN これは、正確ではないという理由だけですか?持続するかどうかは関係ないと思いましたか? これを非計算列にすることなく、このインデックスをシーク可能にする方法はありますか? これに関する情報へのリンクはありますか? 実際のテーブル作成を投稿することはできませんが、同じ問題があるテストテーブルを次に示します。 drop TABLE [dbo].[Test] CREATE TABLE [dbo].[Test] ( [test] [VARCHAR](100) NULL, [TestGeocode] [geography] NULL, [Hashkey] AS CAST( ( hashbytes ('SHA', ( RIGHT(REPLICATE(' ', (100)) + isnull([test], ''), ( 100 )) ) + …

4
SQL Serverデッドロックレポートのキーを値に変換するにはどうすればよいですか?
waitresource = "KEY:9:72057632651542528(543066506c7c)"に関連する競合があったことを示すデッドロックレポートがあり、これを見ることができます。 <keylock hobtid="72057632651542528" dbid="9" objectname="MyDatabase.MySchema.MyTable" indexname="MyPrimaryKeyIndex" id="locka8c6f4100" mode="X" associatedObjectId="72057632651542528"> <resource-list>内。キーの実際の値(id = 12345など)を検索できるようにしたい。その情報を取得するには、どのSQLステートメントを使用する必要がありますか?

1
sp_cursoropenと並列処理
私は頭を悩ませることができないように見えるクエリでパフォーマンスの問題に直面しています。 カーソル定義からクエリを引き出しました。 このクエリの実行には数秒かかります SELECT A.JOBTYPE FROM PRODROUTEJOB A WHERE ((A.DATAAREAID=N'IW') AND ((A.CALCTIMEHOURS<>0) AND (A.JOBTYPE<>3))) AND EXISTS (SELECT 'X' FROM PRODROUTE B WHERE ((B.DATAAREAID=N'IW') AND (((((B.PRODID=A.PRODID) AND ((B.PROPERTYID=N'PR1526157') OR (B.PRODID=N'PR1526157'))) AND (B.OPRNUM=A.OPRNUM)) AND (B.OPRPRIORITY=A.OPRPRIORITY)) AND (B.OPRID=N'GRIJZEN'))) AND NOT EXISTS (SELECT 'X' FROM ADUSHOPFLOORROUTE C WHERE ((C.DATAAREAID=N'IW') AND ((((((C.WRKCTRID=A.WRKCTRID) AND (C.PRODID=B.PRODID)) AND …


1
部分的に更新された行を読みますか?
SSMSの2つの個別のセッションで実行される2つのクエリがあるとします。 最初のセッション: UPDATE Person SET Name='Jonny', Surname='Cage' WHERE Id=42 2番目のセッション: SELECT Name, Surname FROM Person WITH(NOLOCK) WHERE Id > 30 SELECTステートメントが半分更新された行、たとえばName = 'Jonny'andを含む行を読み取ることは可能Surname = 'Goody'ですか? クエリは、別々のセッションでほぼ同時に実行されます。

2
データベースの暗号化証明書をリストするクエリ
インスタンス上の各データベースを暗号化するために使用されている証明書。 以下を使用してデータを取得できますが、クエリをどのように作成しますか USE master GO -- this provides the list of certificates SELECT * FROM sys.certificates -- this provides the list of databases (encryption_state = 3) is encrypted SELECT * FROM sys.dm_database_encryption_keys WHERE encryption_state = 3; sys.certifcates.thumbprint列とsys.dm_database_encryption_keys.encryptor_thumbprint列に同じデータが含まれていることに気付きました。

2
varchar列のサイズを小さくすると、データベースファイルにどのような影響がありますか?
データベースにはVARCHAR(MAX)、a VARCHAR(500)(またはmaxよりもはるかに小さいもの)で十分な列を持つテーブルがいくつかあります。当然、これらをクリーンアップし、サイズをより合理的なレベルに下げたいと思います。これを行うための「方法」は理解しています:私の質問は、これらの列を変更すると、ディスク上のページとエクステントに何が影響するのでしょうか?(列を拡大すると何が起こるかについて多くの情報がありますが、列を縮小すると何が起こるかに関する情報を見つけるのが困難です。) 一部のテーブルは行数が非常に少ないため、変更のコストについては心配していませんが、一部は非常に大きく、潜在的に再編成されて多くのブロッキング/ダウンタイムが発生することを心配しています。実際には、メンテナンスウィンドウを見積もる方法が必要です。一般に、この場合のデータベースエンジンの動作をよりよく理解したいと思います。 前もって感謝します! 編集: 見ているテーブルは20個ありますが、行カウントが1,000を超えるテーブルは半分しかありません。最大のものにはほぼ100万行あります。最悪の違反者は、350,000行と4 VARCHAR(MAX)列からなるテーブルで、このVARCHAR(500)レベルまで縮小できます。

1
一意のインデックススキャン後に集計演算子が使用される理由
NULL不可の値に対してフィルター処理された一意のインデックスを持つテーブルがあります。クエリプランでは、distinctの使用があります。これには理由がありますか? USE tempdb CREATE TABLE T1( Id INT NOT NULL IDENTITY PRIMARY KEY ,F1 INT , F2 INT ) go CREATE UNIQUE NONCLUSTERED INDEX UK_T1 ON T1 (F1,F2) WHERE F1 IS NOT NULL AND F2 IS NOT NULL GO INSERT INTO T1(f1,F2) VALUES(1,1),(1,2),(2,1) SELECT DISTINCT F1,F2 FROM T1 WHERE F1 …

3
特定のインスタンスのデータベースによるCPU使用率を取得する方法は?
データベースごとのCPU使用率を検出する次のクエリを見つけましたが、異なる結果が表示されています。 WITH DB_CPU_Stats AS ( SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms] FROM sys.dm_exec_query_stats AS qs CROSS APPLY ( SELECT CONVERT(int, value) AS [DatabaseID] FROM sys.dm_exec_plan_attributes(qs.plan_handle) WHERE attribute = N'dbid') AS F_DB GROUP BY DatabaseID ) SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num], DatabaseName, [CPU_Time_Ms], CAST([CPU_Time_Ms] * 1.0 …

1
指定した時間だけ一時停止/スリープ/待機するクエリを設計するにはどうすればよいですか?
SQL Server 2000インスタンスに対して監視アプリケーションをテストしています。指定した時間がかかるT-SQLクエリを作成するにはどうすればよいですか?たとえば、ほとんどのスクリプト言語にはSLEEP、指定された時間だけスクリプトの実行を一時停止できるコマンドのようなものがあります。SQL Server 2000と互換性のある類似のものを探しています。これは、監視アプリケーションの長時間実行されるクエリのしきい値設定をテストすることを目的としています。


2
SQL Serverでは、次の場合にLOOP JOINを強制する必要がありますか?
通常、すべての標準的な理由から、結合ヒントを使用しないことをお勧めします。しかし、最近、パフォーマンスを向上させるために強制ループ結合をほぼ常に見つけるパターンを見つけました。実際、私はそれを使い始め、推奨しすぎているので、何かを見逃していないことを確認するためにセカンドオピニオンを得たいと思いました。代表的なシナリオを次に示します(例を生成するための非常に具体的なコードは最後にあります): --Case 1: NO HINT SELECT S.* INTO #Results FROM #Driver AS D JOIN SampleTable AS S ON S.ID = D.ID --Case 2: LOOP JOIN HINT SELECT S.* INTO #Results FROM #Driver AS D INNER LOOP JOIN SampleTable AS S ON S.ID = D.ID SampleTableには100万行があり、そのPKはIDです。 一時テーブル#Driverには、1つの列、ID、インデックスなし、5万行しかありません。 私が一貫して見つけることは次のとおりです。 ケース1:NOヒント SampleTableを上のインデックススキャン ハッシュ結合 …
15 sql-server 

4
Mac上のSQL Server
SQL Serverエンジンエクスプレス版はOS Xにインストールできますか?私は自宅でMacBookを使用していますが、SQL Serverのテスト/学習プラットフォームとして使用したいと考えています。

3
win-loss-tieデータからストリークカウントとストリークタイプを取得する
誰にとっても物事が簡単になる場合は、この質問に対してSQL Fiddleを作成しました。 ある種のファンタジースポーツデータベースがあり、私が理解しようとしているのは、「現在のストリーク」データ(チームが最後の2つのマッチアップに勝った場合は「W2」、負けた場合は「L1」など)前回の対戦で勝利した後の最後の対戦-または、最新の対戦で同点だった場合は 'T1')。 基本的なスキーマは次のとおりです。 CREATE TABLE FantasyTeams ( team_id BIGINT NOT NULL ) CREATE TABLE FantasyMatches( match_id BIGINT NOT NULL, home_fantasy_team_id BIGINT NOT NULL, away_fantasy_team_id BIGINT NOT NULL, fantasy_season_id BIGINT NOT NULL, fantasy_league_id BIGINT NOT NULL, fantasy_week_id BIGINT NOT NULL, winning_team_id BIGINT NULL ) 列の値はNULL、winning_team_idその一致の同点を示します。 以下に、6チームと3週間分の対戦のサンプルデータを含むサンプルDMLステートメントを示します。 INSERT INTO FantasyTeams …

1
さまざまなSQL Serverスキーマのユーザー権限を設定する
特定のユーザーへのアクセスを制限する必要がありますが、dboが所有するテーブルのデータを表示できるようにする必要があります。 私は次のことをしようとしています: dboスキーマは通常どおり機能し、すべてにアクセスできます。 schema1スキーマはschema1オブジェクトのみにアクセスできます schema1ビューまたはストアドプロシージャがdboが所有するテーブルのデータにアクセスする場合、パーミッションチェーンは適切に user1はschema1にアクセスできますが、他には何もありません。#3の場合を除く 私が試したものは次のとおりです。 ランダムパスワードを使用してテストログインにマップされたuser1ユーザーを作成します dboスキーマにいくつかのテストデータを含むテーブルをいくつか作成しました schema1スキーマを作成しました dbo.people、dbo.taglinks、およびdbo.tagsのデータにアクセスするschema1.profilesというビューから選択するschema1.get_profilesを作成しました ただし、user1としてログインしているときに次のステートメントを使用します。 EXEC get_profiles 1 結果: The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'. WITH EXECUTE AS OWNER「所有権の連鎖」がどのように機能するかを理解しようと試みましたが、理解できません。 私も試しました GRANT EXECUTE ON SCHEMA::schema1 TO user1 GRANT INSERT ON SCHEMA::schema1 TO user1 GRANT SELECT ON SCHEMA::schema1 …

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