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

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


1
datetime2(0)vs datetime2(2)
ドキュメントdatetime2(Transact-SQL)によると: ストレージサイズは 、精度が3未満の場合は6バイトです。 精度3および4の 場合は7バイトです。他のすべての精度には8バイトが必要です。 大きさはdatetime2(0)、datetime2(1)、datetime2(2)ストレージの同量(6バイト)を使用します。 datetime2(2)サイズコストを追加せずに精度の利点を享受することもできると言って正しいでしょうか? ご注意ください: この列はPKでインデックス付けされ、複合クラスター化インデックスを形成します(テーブルパーティションに使用) ミリ秒は気にしません うdatetime2(0)where句で使用された場合、より多くのCPU効率的であること、またはインデックスを通じて追求するとき? これは巨大なテーブルなので、最小の最適化で大きな違いが生じます。

2
SELECT TOPでインデックスが使用されないのはなぜですか?
要約は次のとおりです。選択クエリを実行しています。WHEREand ORDER BY句のすべての列IX_MachineryId_DateRecordedは、キーの一部として、またはINCLUDE列として、単一の非クラスター化インデックスに含まれます。すべての列を選択しているので、ブックマークルックアップTOP (1)になりますが、を取得するだけなので、サーバーはルックアップを最後に一度だけ実行する必要があることを確認できます。 最も重要なことは、クエリでindexを使用するように強制するとIX_MachineryId_DateRecorded、1秒未満で実行されることです。使用するインデックスをサーバーに決定させると、サーバーが選択しIX_MachineryId、最大1分かかります。これは、私がインデックスを正しく作成したことを本当に示唆しており、サーバーは単に悪い判断を下しています。どうして? CREATE TABLE [dbo].[MachineryReading] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Location] [sys].[geometry] NULL, [Latitude] FLOAT (53) NOT NULL, [Longitude] FLOAT (53) NOT NULL, [Altitude] FLOAT (53) NULL, [Odometer] INT NULL, [Speed] FLOAT (53) NULL, [BatteryLevel] INT NULL, [PinFlags] BIGINT NOT NULL, [DateRecorded] DATETIME NOT …

2
ビューでNOT NULL計算列がNULL可能と見なされるのはなぜですか?
私はテーブルを持っています: CREATE TABLE [dbo].[Realty]( [Id] [int] IDENTITY(1,1) NOT NULL, [RankingBonus] [int] NOT NULL, [Ranking] AS ([Id]+[RankingBonus]) PERSISTED NOT NULL .... ) そしてビュー: CREATE View [dbo].[FilteredRealty] AS SELECT realty.Id as realtyId, ... COALESCE(realty.Wgs84X, ruian_cobce.Wgs84X, ruian_obec.Wgs84X) as Wgs84X, COALESCE(realty.Wgs84Y, ruian_cobce.Wgs84Y, ruian_obec.Wgs84Y) as Wgs84Y, realty.Ranking, ... FROM realty JOIN Category ON realty.CategoryId = …

2
SQLエージェントジョブの詳細な出力を取得する
サーバー上のすべてのデータベースのインデックスを再作成するメンテナンスプランを実行するSQL Serverエージェントジョブがあります。最近、これは失敗しましたが、ジョブ履歴は問題を診断するのに十分な情報を提供していません。 ジョブ履歴に「ジョブが失敗しました」と表示されます。ジョブはユーザーfoo \ barによって呼び出されました。実行する最後のステップはステップ1(インデックスの再構築)でした。 詳細ウィンドウには、次の形式の複数のメッセージがあります。 Executing query "ALTER INDEX [something] ON [a...".: 0% complete End Progress Progress: 2015-03-15 22:51:23.67 Source: Rebuild Index Task 実行中のSQLステートメントは切り捨てられており、ステートメントの出力も切り捨てられているため、どの特定のステートメントが失敗したのか、その理由を特定できないと思います。これらのメッセージの全文を抽出する方法はありますか?


2
GISデータ用のPostGISとSQL Server
だから私は最近新しい会社に着手し、顧客にデータを提供するためにPostGISインスタンスを進めたいと強く思っている多くのArcGISユーザーがいます。これについては問題ありませんが、私たちは95%がSQL Server、5%がOracleショップです。現在の内部GISはSQL Serverで実行されており、苦情はまだ聞いていません。 2012年の時点で、SQL Serverの空間/幾何学的機能が大幅に改善されていることは知っていますが、新しいプラットフォームに侵入する価値のあるPostGISのキラー機能はありますか?私はそれを研究しようとしましたが、真に詳細なものを見つけることができません、またはそれは完全に偏っていません。 私は彼らに彼らの仕事を成し遂げるための最高のツールを提供したいだけでなく、私が最初からPostgres / GISを学び、それがそれ自体の全体の旅であるという事実を考慮しなければなりません。

3
最も効率的なUUID列タイプは何ですか
128ビットUUIDを保存するには、複数の保存オプションがあります。 byte [16]列 2つのbigint / long(64ビット)列 CHAR(36)列-32桁の16進数+ 4つのダッシュ。 dbがサポートしている場合、UUIDデータベース固有の列 インデックスの観点から、どれが最も効率的ですか?データベースが専用のuuidタイプをサポートしていない場合、1、2、3のうちどれが最適な候補ですか?

3
SQL ServerでUNIQUEIDENTIFIERを安全に生成する
UNIQUEIDENTIFIERユーザーが特定のデータにアクセスするために使用できるアクセスキーとしてを使用する予定です。その意味で、キーはパスワードとして機能します。 INSERT...SELECTステートメントの一部として、このような識別子を複数生成する必要があります。アーキテクチャ上の理由から、この場合はサーバー側で識別子を生成します。 安全にランダムに生成するにはどうすればよいUNIQUEIDENTIFIERですか?NEWIDセキュリティプロパティがまったく保証されないため、これは十分にランダムではないことに注意してください。推測できないIDが必要なため、SQL ServerのSystem.Security.Cryptography.RandomNumberGeneratorに相当するものを探しています。に基づくものCHECKSUM、RANDまたはGETUTCDATE資格がないもの。

1
単一のデータベースに対する一括挿入権限
私はまっすぐなITセキュリティマナーを持つ会社で働いています。私たちのチームのいくつかのプロセスを最適化するために、データベースアナリストとして雇われました。問題は、読み取りと書き込みのアクセス許可しか持っていないことと、データベースの高度なアクセス許可を取得しようとしています。現在、単一のサーバーに多数のデータベースがあり、単一のデータベースでのみ作業BULK INSERTできます。許可を単一のデータベースに与えることができるのか、それともサーバー全体に許可するのか疑問に思いました。 これについてウェブで検索しましたが、少し混乱しました。これは私が見つけたものです。BULK INSERTを使用INSERTするには、目的のテーブルまたはデータベースへのアクセス許可が必要ADMINISTER BULK OPERATIONSです。これはサーバー全体のアクセス許可です。ADMINISTER BULK OPERATIONSデータベース全体に対するINSERTアクセス許可と単一のデータベースに対するアクセス許可が与えられた場合、他のデータベースに対するアクセス許可BULK INSERTがないため、その単一のデータベースでのみINSERTアクセスできませんか? BULK INSERT複数のデータベースを持つサーバー上の単一のデータベースへの使用を制限することは可能ですか? テキストの壁についてすみません、ありがとう!

2
SQL Server Decimal(9、0)vs INT
顧客の1人がDECIMAL(18,0)、SQL Server 2008R2データベースのデータ型を一部の列に使用しています。列の成長が非常に遅いため、彼は最近、データ型を変更してDECIMAL(5,0)ストレージを回復することを提案しました。 MSDNライブラリによると、DECIMAL(5,0)データ型の記憶領域は、データ型と同様DECIMAL(9,0)に5バイトです。INT1バイト小さくなりますが、格納できる-99,999〜99,999の代わりに-2 ^ 31〜2 ^ 31の範囲ですべてをDECIMAL(5,0)格納できます。DECIMAL5バイト(DECIMAL(9,0))に収まる最大サイズでも、-999,999,999から999,999,999の範囲の整数のみを格納できます(INT4バイトで提供される範囲の半分未満です)。 DECIMALover を使用することの2つの「メリット」を考えることができますINT。 後でストレージ容量を使用せずにスケールを追加する機能 データ型を変更せずに、38桁まで精度をスケーリングする機能 しかし、これらは私の意見では本当の利点ではありません: 整数へのスケールの追加は、ごくわずかな場合にのみ意味があります(スケールが違いを生むほとんどの場合、事前に追加することもできます) SQL Serverは、すべての精度/スケールの組み合わせを異なるデータ型と見なします。そのため、精度またはスケールを増やしても、データ型はそのままではありません。 これは私に疑問を抱かせます:DECIMAL(5,0)整数のデータ型の追加の利点は何ですか?

1
SQL ServerのShowplan XMLの解釈
サイトhttp://sqlfiddle.comに、ユーザーがクエリの未加工の実行計画を表示できる機能を展開しました。PostgreSQL、MySQL、および(ある程度)Oracleの場合、生の実行計画の出力を見ると理解できるように見えます。ただし、SQL Server(で生成されたSET SHOWPLAN_XML ON)の実行計画の出力を見ると、比較的単純なクエリであっても、大量のXMLが処理されます。次に例を示します(この「フィドル」の最後のクエリの実行計画から取得:http ://sqlfiddle.com/#!3/ 1fa93/1): <ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.1" Build="10.50.2500.0"> <BatchSequence> <Batch> <Statements> <StmtSimple StatementText="
select * from supportContacts" StatementId="1" StatementCompId="1" StatementType="SELECT" StatementSubTreeCost="0.0032853" StatementEstRows="3" StatementOptmLevel="TRIVIAL" QueryHash="0x498D13A3874D9B6E" QueryPlanHash="0xD5DDBD3C2D195E96"> <StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="false" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false"/> <QueryPlan CachedPlanSize="16" CompileTime="0" CompileCPU="0" CompileMemory="72"> <RelOp NodeId="0" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="3" EstimateIO="0.003125" EstimateCPU="0.0001603" …

6
ストアドプロシージャの実行が突然遅くなる
SQL Server 2000で発生している問題を理解しようとしています。中程度のトランザクションWebサイトでありsp_GetCurrentTransactions、customerIDを受け入れるストアドプロシージャと2つの日付があります。 現在、日付と顧客に応じて、このクエリは0〜1000行の任意の行を返すことができます。 問題:私たちが経験したことはExecution Timeout Expired、特定のクライアントがそのストアドプロシージャを実行しようとすると、突然(通常または同様の)多くのエラーが発生することです。そのため、クエリを調べてSSMSで実行すると、30秒かかることがわかります。したがって、ストアドプロシージャを再コンパイルすると、-bang-が300ミリ秒で実行されます。 私はこれについてDBAに話しました。彼は、ストアドプロシージャを作成したときにデータベースがクエリプランを作成したと言っています。彼は、そのパラメーターセットには良い計画であると言いましたが、特定のパラメーターセットをスローすると、そのデータに最適なプランではなくなるため、実行が遅くなります。 私に提示されたオプションは、問題のクエリをストアドプロシージャから、実行ごとに作成された実行プランを持つ動的SQLに戻すことです。 これは私に一歩後退したような気がし、これを回避する方法があるに違いないと感じています。この問題に対処する他の方法はありますか? ありとあらゆる回答を歓迎します。

6
SQL ServerはGREATESTとLEASTをサポートしていますか?サポートされていない場合、一般的な回避策は何ですか?
この質問を検討すると、それは必要のない多くの作業のようです。彼らは日付で範囲を拡大しようとしています。他のデータベースでは、単にgreatestandを使用しleastます。 least(extendDate,min), greatest(extendDate,max) これらを使用しようとすると、 'least' is not a recognized built-in function name. 'greatest' is not a recognized built-in function name. それはどちらの方向への拡張もカバーします。 質問の目的のために、あなたはまだ排他的な範囲置換をしなければならないでしょう。 SQL Serverユーザーがどのようにクエリパターンを実装して模倣するかleast、greatest機能するのか疑問に思っています。 PostgreSQL GREATEST/LEAST MySQL GREATEST/LEAST MariaDB GREATEST LEAST DB2 GREATEST LEAST オラクル GREATEST LEAST 条件をCASEステートメントに展開しますか、またはこの機能を有効にする拡張機能、サードパーティのアドオン、またはマイクロソフトからのライセンスがありますか?


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