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

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

1
insert-execブロックを使用して呼び出されたストアドプロシージャでの例外の処理
insert-execブロックで呼び出されるストアドプロシージャがあります。 insert into @t exec('test') ストアドプロシージャで生成された例外を処理し、処理を続行するにはどうすればよいですか? 次のコードは問題を示しています。私がやりたいことは、内部exec()呼び出しの成功または失敗に応じて0または-1を返すことです。 alter procedure test -- or create as begin try declare @retval int; -- This code assumes that PrintMax exists already so this generates an error exec('create procedure PrintMax as begin print ''hello world'' end;') set @retval = 0; select @retval; return(@retval); end try …

2
インデックスをフィルターされた(非null値)インデックスに置き換えるとどのような影響がありますか?
私たちのプロジェクトは、非常に大規模で非常に複雑なデータベースを実行しています。そのため、約1か月前に、null値を含むインデックス付き列で使用される領域が大きくなりすぎていることに気付きました。これに対する応答として、1%を超えるnull値を含むすべての単一列インデックスを動的に検索し、値がNOT NULLであるという条件でフィルター処理されたインデックスとしてそれらのインデックスを削除して再作成するスクリプトとして書きました。これにより、データベース全体で数百のインデックスが削除および再作成され、通常、DB全体で使用されるスペースのほぼ15%が解放されます。 今私はこれについて2つの質問があります: A)この方法でフィルター処理されたインデックスを使用することの欠点は何ですか?パフォーマンスが向上するだけだと思いますが、パフォーマンス上のリスクはありますか? B)インデックスを削除して再作成すると、「インデックスXYZは削除できないため、削除できません」というエラーが発生しました。後でチェックすると、すべてが期待どおりに実行されました。これはどうして起こりますか? 助けてくれてありがとう! 編集: @Thomas Kejserへの返信 こんにちは、ありがとうございます。しかし、これは災害でした。当時、私たちは次のようないくつかのことを理解していませんでした: SQLOSはクエリ中に、テーブル列の結合にNULL値を使用できないと判断する前に、インデックスプランを作成します。つまり、クエリで使用されるすべてのフィルター処理されたインデックスのインデックスをフィッティングするWHERE句フィルターが本当に必要です。そうしないと、インデックスはまったく使用されません。 インデックスを削除して作成し、その後統計を冗長に更新するだけでは、更新された計画を作成するには不十分である可能性があります。場合によっては、SQL Serverが計画の再評価を余儀なくされるほど高いワークロードのみが表示されることがあります。 常識とロジックだけで判断するのが難しい実行プランナーの機能には、いくつかの珍しいものがあります。数千のコードビハインドで生成されたさまざまなクエリのバリエーションでさえ、一見役に立たないように見えるインデックスは、重要なクエリで使用される統計やクエリプランに役立ちます。 最終的に、これらの変更は元に戻されました。したがって、フィルター選択されたインデックスは強力なツールですが、これらの列からフェッチされるデータを正確に理解する必要があります。スペースの問題は別として、通常のインデックスは適用がかなり簡単ですが、フィルター選択されたインデックスは非常にカスタマイズされたソリューションを表します。これらは通常のインデックスの代わりではなく、必要な特別な状況での拡張です。


4
シングルユーザーモードでSQLサーバーに接続できない
私は私の始めているSQL Server 2008 sqlcst02\inst01中をSingle User Mode付加することで;-m、このインスタンスの起動パラメータの終わりにSQL Server Configuration Manager。インスタンスのSQL Server Agentために停止しましたinst01。私のアカウントはのメンバーであり、サービスDomain Admin groupを使用してログインしようとするsqlcmd -S sqlcst02\inst01とエラーが発生し続け、ログインSingle User Modeできる管理者は1人だけです。;-m"sqlcmd"接続を制限するために起動パラメーターに追加しようとしましたsqlcmdが、同じ結果。私は自分のアカウントでログインし、ローカル管理者アカウントでログインしてみました。自分と管理者の両方でコマンドプロンプトを起動しましたが、同じ結果が得られます。で接続してみADMIN:sqlcst02\inst01ましたSSMS。運が悪い。 sa前の管理者がこの情報を教えてくれなかったため、パスワードをリセットしようとしています。これは厄介です。私は以前に他のマシンでこれを問題なく行いました。

1
SQL Server 2000から2008から2012
現在、SQL Server 2000から2008に移行しています。2000年から2008年にかけて多くの変更が加えられたため、コードやスクリプトに多くの変更を加えています。これらの変更を行いながら、知りたいのは-2012年にも互換性を持たせるために今できることはありますか?同時に。2012年から2008年などの下位互換性のある変更が少なくともあります。これを行いたいのは、2008年から2012年に移行することを決定したときに、将来(3〜4年後)の労力を最小限に抑えるためです。私ができること、または知っておくべきことは何ですか?

3
分散スイッチを使用してVMWareゲストからSQL Serverに一括挿入
これはほとんどSQLサーバーの問題ではない可能性がありますが、セットアップはSQLサーバーへの一括挿入にのみ影響しているようです。 最近、VMハードウェアを移動しました。移動したすべてのゲストの仮想スイッチが標準から分散に変更されました。 それから私は受け取り始めました ネットワークからの入力ストリームの読み取り中に致命的なエラーが発生しました。セッションは終了します(入力エラー:64、出力エラー:0) BULK INSERT操作中の2つのSQLサーバー。SQLサーバーの1つは新しい構成のVMで、もう1つは物理サーバーです。両方のBULK INSERT操作は、新しい構成のVMから発生しました。BULK INSERTは毎回失敗するわけではなく、失敗するときは非常にランダムでした。 仮想スイッチを分散スイッチではなく標準スイッチに変更すると、問題はなくなります。 解決策の代わりに分散スイッチで動作しない理由の詳細を探しています。私の推測では、BULK INSERT操作はシリアルであり、分散スイッチでは、パケットは異なるホストを介してルーティングされており、その一部は他のホストよりビジーであり、遅延しきい値を超えて宛先サーバーに到達しています。(注:ソースまたは宛先サーバーのいずれかでエラーが発生したとき、Windowsイベントログには何もありません) 更新:問題はNICが原因であることが判明しました。すべてのVMは、標準スイッチで十分に機能するE1000 NICで構成されました。分散スイッチに移行すると、SQLクエリだけでなく、大量のデータ転送に関する問題が発生し始めました。NICをVMXNET3に変更すると、問題が解決したようです。

1
結合を使用すると、SQL Serverはどのように結果を並べ替えますか?
SQL Serverは、クエリ実行の結果セット内のレコードの順序をどのように把握しますか? 頭や尻尾を作ろうとしているのですが、頭をひっかいています。フィールドを変更すると、選択する順序も変更されます。以下のSQLをaで実行するとSELECT *、同じレコードが取得されますが、順序が大きく異なります。 SELECT TOP (900) AD.ATTACHMENTID, AD.NAME, AD.ISINLINE, AD.INSERTEDDATETIME, ATMT.ATTACHMENTBLOB, U.UFID FROM ATTACHMENTDETAIL AD WITH (NOLOCK) INNER JOIN MESSAGEATTACHMENT MA ON MA.ATTACHMENTID = AD.ATTACHMENTID INNER JOIN ATTACHMENT ATMT ON ATMT.ATTACHMENTID = AD.ATTACHMENTID INNER JOIN MESSAGE MSG ON MSG.ID = MA.MESSAGEID INNER JOIN MESSAGEDETAIL MD ON MD.MESSAGEID = MA.MESSAGEID …

3
SQL Server Management Studioを介して別のサーバーをマップする方法
コマンドを入力して別のサーバーをマップしようとしています EXEC xp_cmdshell 'NET USE H:\\568.256.8.358\backup_147 1234abc /USER:cranew /PERSISTENT:yes' これでエラーが発生しました: ネットワークパスが見つかりません しかし、別のサーバーを手動でマップすることができます。これを整理するのを手伝ってください。

3
これら2つのクエリは論理的に同等ですか?
これら2つのクエリは論理的に同等ですか? DECLARE @DateTime DATETIME = GETDATE() クエリ1 SELECT * FROM MyTable WHERE Datediff(DAY, LogInsertTime, @DateTime) > 7 クエリ2 SELECT * FROM MyTable WHERE LogInsertTime < @DateTime - 7 それらが論理的に同等でない場合、WHERE句がインデックスを効果的に使用できるように(つまり、関数のラッピングを排除する)ために、最初のクエリと論理的に同等のものを提供できますか?

3
マージレプリケーションのアーティクル数のハード制限?
背景のビット。マージレプリケーションを使用するアプリを開発しました。現在、約212の記事を公開していますが、256の記事数の制限に収まっているようです。(サーバーではSQL Standard 2005、サブスクライバーレベルでは2005 Expressを使用します。) 私たちは新しいバージョンを開発中であり、新しいデータベースはゼロから構築されています。これには、SQL 2008 R2 Standardサーバー側とExpress 2008 R2の最小システム要件があり、クライアント側でも同様です。公開された記事と同じ256カウント制限。(はい、2012年もサポートしますが、制限は同じです) 問題は、新しいバージョンで400以上の記事を公開してテストに成功し、すべてが機能的にテストされるところです(パブの作成、スナップショットとサブスクライバーの作成、およびレプリケーション自体)。他の誰かが以前にカウント制限を超えたことがありますか?これはソフト推奨制限に過ぎませんか?パブリケーションの作成中、またはサブスクライバーの作成中に、エラーは発生していません。 この記事によると:http : //msdn.microsoft.com/en-us/library/ms143432%28v=sql.105%29 Microsoftからのコールバックを待っていますが、SQLのどのバージョンでも、これを以前に見たことがあるかどうか知りたいのですが。

1
バックアップからのトランザクションレプリケーションの初期化
レプリケーションのパブリケーションを設定するときに、バックアップからの初期化を許可するオプションがあります。私たちは数年前から複製データベースを作成しており、常にバックアップから初期化してきましたが、このフラグを設定したことはありません(数日前に初めて気づきました)。複製は常に問題なく機能してきました。 これを使用する必要があることを説明するヒットがたくさん見つかりましたが、理由を説明するものはありません。 これが実際に何をしているのか誰かが理解していますか?私の観点から、それは必要ではないようですが、私は何かを逃している必要があると考えています。

2
文字列から数値以外の文字を削除するにはどうすればよいですか?
ユーザーがボックスに検索語を入力すると、その値がストアドプロシージャに渡され、データベース内のいくつかの異なるフィールドに対してチェックされます。これらのフィールドは、常に同じデータ型であるとは限りません。 1つのフィールド(電話番号)はすべての数字で構成されているため、チェックすると、.Net CLR関数を使用して文字列からすべての非数値文字が削除されます。 SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '') 問題は、この関数が次のエラーで突然動作を停止することです。 メッセージ6533、レベル16、状態49、行2 AppDomain MyDBName.dbo [runtime] .1575はエスカレーションポリシーによってアンロードされ、 アプリケーションの一貫性。重要なリソースへのアクセス中にメモリ不足が発生しました。 System.Threading.ThreadAbortException:タイプの例外 'System.Threading.ThreadAbortException'がスローされました。 System.Threading.ThreadAbortException: このエラーについてMSDNに投稿された提案を試しましたが、まだ問題が発生しています。現時点では、64ビットサーバーに切り替えることはできません。 サーバーを再起動すると、サーバーが保持していたメモリが解放されることは知っていますが、本番環境では実行可能なソリューションではありません。 T-SQLのみを使用してSQL Server 2005で文字列から数値以外の文字を取り除く方法はありますか?

1
動的に作成されたテーブルデータを返すストアドプロシージャ
簡単に言えば、調査システムを備えた外部ベンダーと協力しています。システムは、新しい調査を作成し、システムが新しいテーブルを作成するときに、必ずしも次のように設計されているとは限りません。 Tables ____ Library_1 -- table for Survey 1 SurveyId int InstanceId int Q_1 varchar(50) Library_2 -- table for Survey 2 SurveyId int InstanceId int Q_2 int Q_3 int Q_4 varchar(255) テーブルはで生成されたSurveyId名前の末尾に(Library_)と質問の列がで生成されQuestionId、それの終わり(でQ_)。 明確にするために、質問は別のテーブルに格納されているため、質問IDは連続していますが、各調査で1から開始されません。質問の列は、テーブルで割り当てられたIDに基づいています。 別のシステムに送信するためにすべての調査テーブルからデータを抽出する必要があることを除いて、クエリを実行するのに十分簡単なようです。これは問題が発生する場所です。新しい調査がフロントによって追加されると、テーブルが自動的に作成されるため、アプリケーションを終了すると、他のシステムはこのタイプの構造を処理できません。彼らは消費するためにデータが一貫している必要があります。 そのため、すべてのSurveyテーブルからデータを抽出して次の形式で配置するストアドプロシージャを作成する必要がありました。 SurveyId InstanceId QNumber Response ________ __________ _______ ________ 1 1 1 great 1 2 1 …

2
インデックスはメモリを消費しますか?
SQL Serverでのメモリ使用量について学び始めました。質問SQL Server 2008 R2「ゴーストメモリ」への回答でクエリを使用する場合 、私は単一のデータベースがバッファプールの非常に大きな領域を占有していることを発見しました。さらに調べてみるsys.allocation_unitsとsys.indexes、とを使用して、データベースでインデックスが頻繁に使用されていることが原因であることを確認しました。ほとんどのインデックスはクラスター化されています。 別のデータベース開発者は、サーバーでメモリの問題が発生していると考えています。利用可能なメモリがないため、クエリが長く実行され始めています。 私の質問はここにあります-これらのインデックスの使用とバッファプール内でのそれらの存在は、他のプロセスで利用可能なメモリを奪いますか?

5
列をコンマで分割するT SQLテーブル値関数
Microsoft SQL Server 2008でテーブル値関数を記述して、データベースのカンマ区切りの列を取得し、各値の個別の行を出力しました。 例:「one、two、three、four」は、次の値を含む列が1つだけの新しいテーブルを返します。 one two three four このコードはエラーが発生しやすいように見えますか?私がそれをテストするとき SELECT * FROM utvf_Split('one,two,three,four',',') 永久に実行され、何も返さない。MSSQLサーバーには組み込みの分割関数がないので(なぜ、なぜ、なぜ!?)、Webで見つけた同様の関数はすべて、完全にゴミ箱であるか、または私がやろうとしていることとは無関係であるため、これは特に失望します。 。 これが関数です: USE *myDBname* GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR) RETURNS @SplitValues TABLE ( Asset_ID VARCHAR(MAX) NOT NULL ) AS BEGIN DECLARE @FoundIndex INT DECLARE …

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