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

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

3
SQL Serverは、等しい比較ではなく、類似の比較ではないvarchar値の自動トリム
今日、SQL Serverでいくつかの興味深い動作(2005年と2012年に観測)に遭遇しました。 =NVARCHARフィールドを使用して比較を行うクエリは、文字列の末尾のスペースを無視しました(または比較前に値を自動トリミングしました)が、like演算子を使用した同じクエリはスペースを無視しませんでした。使用されている照合は、2012年にLatin1_General_CI_ASです。 このSQL Fiddleを検討してください:http : //sqlfiddle.com/#!6/72262/4 like演算子は末尾のスペース文字列の結果を返さないが、演算子は返すことに注意してください=。どうしてこれなの? ボーナスポイント:これをVARCHARフィールドに複製することはできません。スペースは両方のデータタイプで同じように処理されると考えていました。これは本当ですか?

1
BitlockerでSQL Server 2012 Standardを使用する
Bitlockerを使用してSQL Server 2012データベースを保護しようとしています。Bitlockerを機能させるための問題はありません。問題は、ドライブがロックされると、SQL Serverがデータを読み取れなくなることです。 もちろんTDEを使​​用したいのですが、それはEnterpriseエディションに限定されているため、これはやめましょう。サーバーでTPMがアクティブになっています。これはWindowsドメインにあり、Windows認証を使用します...しかし、ドライブが暗号化されると、DBに何もアクセスできなくなります。 ここに何が欠けていますか?

3
ユーザー定義のテーブルタイプを作成し、同じトランザクションで使用できますか?
次を実行すると(管理スタジオで、GOはコマンドをバッチに分割します) use tempdb begin tran go CREATE TYPE dbo.IntIntSet AS TABLE( Value0 Int NOT NULL, Value1 Int NOT NULL ) go declare @myPK dbo.IntIntSet; go rollback デッドロックエラーメッセージが表示されます。私のプロセスはそれ自体でデッドロックしました。この動作は2008年、2008R2、2012年に見ました。 作成された同じトランザクション内で新しく作成されたタイプを使用する方法はありますか?

2
sp_executesqlはクエリプランをいつ更新しますか?
私はDBAではないので、私の素朴さを許さなければなりませんが、データベースの変更とストアドプロシージャの統計を時間の経過とともに再コンパイルして、クエリプランを最新の統計で最新に保つ必要があることを理解しています。 私が最新の統計に対して再コンパイルされた私のデータベース内のストアドプロシージャ持つと仮定すると、いくつかのコードでストアドプロシージャをインライニングとそれを包むの意味するものは、一定の間隔をsp_executesql文では?プロシージャの再コンパイルの一部として行われていたクエリプランの更新が失われますか? この変更を行う前に考慮する必要のあるもの(権限以外)があれば、あなたの洞察に感謝します。 私はMSDNでこれを読みました: SQL Serverクエリオプティマイザーが既存の実行プランと新しいTransact-SQL文字列を一致させる機能は、特に複雑なTransact-SQLステートメントで、文字列のテキストのパラメーター値が絶えず変化することによって妨げられます。 だから、私がインラインしてラップしようとしているストアドプロシージャにsp_executesql実際にいくつかのパラメータが含まれていると仮定すると、これは私の実行計画がキャッシュされているが、SQL Serverがそれを見つけて再利用することをより難しくしているということですか?

1
SQLCMDモードでの変数の設定
SQL Server 2008 R2 Enterprise Editionの使用 次の文を考慮してください。 :setvar source_server_name "SERVERNAME\INSTANCENAME" SQLCMDモードでTSQLを使用してその値を取得することは可能ですか 何かのようなもの: :setvar source_server_name = SELECT @@servername ありがとうございました アップデート7/15/2013 以下に示す2つの回答では、望ましい結果が得られなかったため、より関連性の高い試験を追加します。 :setvar source_server_name [myserver] 変数source_server_nameはテキスト文字列[myserver_1]に設定されます これをできるようにしたい: create table #tmp( id int identity(1,1), server sysname ) insert into #tmp values('myserver_1'),('myserver_2'); :setvar source_server_name = SELECT server FROM #tmp WHERE id = 1 select …

4
ディスク容量が不十分なため、データベースに新しいページを割り当てることができませんでした
SQL Serverのインポートおよびエクスポートウィザードを使用すると、次のエラーが表示されます。 エラー0xc0202009:データフロータスク1:SSISエラーコードDTS_E_OLEDBERROR。 OLE DBエラーが発生しました。エラーコード:0x80004005。 ファイルグループ「PRIMARY」のディスク領域が不十分なため、データベース「database」に新しいページを割り当てることができませんでした。ファイルグループにオブジェクトをドロップするか、ファイルグループにファイルを追加するか、ファイルグループ内の既存のファイルの自動拡張をオンに設定して、必要なスペースを作成します。 一連の2GBファイルをアップロードしようとしていますが、4番目のファイルの読み込み中に、(データベースプロパティ)>(ファイル)に移動し、ファイルグループの自動拡張を2500 MBに変更し、最大サイズを無制限にした後でも、上記のエラーメッセージが表示され続けます。 最善の回避策は何ですか?このデータは最終的に約60〜80 GBを占有します。
13 sql-server 

4
ネットワークを介した一括挿入
誰かがこれらを手伝ってくれますか? BULK INSERT DATABESE01.dbo.TABLE01 FROM '\\COMPUTER01\FOLDER01\TextFile.txt' WITH ( FIELDTERMINATOR = ' ', rowterminator = '\n', tablock ) エラーが表示され、開くことができませんでした: ファイル '\ SERVERNAME \ FOLDERNAME \ textFile.txt'を開けなかったため、一括挿入できませんでした。オペレーティングシステムエラーコード5(アクセスが拒否されました。) パスはネットワーク上の別のコンピューター上にあります。

2
より多くのCPUコアとより高速なディスク
私は小さな会社の一員なので、いつものようにさまざまな役割を担当しています。最新のものは、.NET Webアプリ専用のSQL Serverボックスを調達しています。32 GBのRAMを備えたデュアルXeon E5-2620(6コア)2.00 GHz CPU構成(合計12コア)で引用されています。これにより、ディスクアレイの予算が制限され、基本的にRAID 1構成の2つの2.5インチSAS 300 GBドライブ(15k RPM)で構成されます。 ディスクのセットアップがSQL Serverにとって最適ではないことを知っているので、データベース、ログファイル、およびtempdbを独自のドライブに配置できるように、RAID 10をプッシュしたいと考えています。これを予算と両立させるには、CPUコアの数を減らすことを検討する必要がありますか?それとも、コアを保持し、使用するドライブを少なくして、おそらくデュアルRAID 1セットアップで4台を使用することで、より良い銀行を獲得できますか? 追加の統計情報は次のとおりです SQL Serverデータベースは、おそらく80%対20%の多数の読み取りから書き込みに傾いています。現在のDBサイズは現在約10 GB、 26 GBで、1か月あたり250 MBの割合で増加しています。 現在、Webサーバー(RAID 1の12 GB Ram、2 x 10k 300GB SASドライブ)と共有されているシングルクアッドコアXeonボックスでSQL Server 2008 R2 Standardを実行し、SQL Server 2012 Standardへの移行を検討しています。 データベースは約100〜150人の同時ユーザーにサービスを提供し、バックグラウンドスケジューリングタスクがスローされます。これを読んで、12コアは深刻すぎると思います! SQL Azure DBにリンクされたAzureクラウドサービス(2つの小さなインスタンス)にアプリケーション全体をデプロイしました。テスト時のパフォーマンスは合理的でしたが(ほとんどゼロの負荷)、予測不可能だったため、本番環境で使用する勇気を失いました。スケールアウトのアプローチではうまくいくかもしれませんが、たった10 GBのデータベースを使用すれば、今すぐスケールアップしてお金を節約できます。 最初はライセンスコストを見落としていましたが、SQL Server 2012のライセンスがコアの数に基づいていることに気付きませんでした。SQL Server 2012 StandardライセンスのBizSpark MSDNサブスクリプションを持っているので、これがすぐに利用できるコアの数について調べる必要があります。


2
なぜ数字以外が「0-9」なのですか?
私のサーバーのデフォルトの照合は、次のクエリによって決定されるLatin1_General_CI_ASです。 SELECT SERVERPROPERTY('Collation') AS Collation; この照合により、述語を使用して文字列内の数字以外の文字と一致できることを発見して驚きましたLIKE '[0-9]'。 デフォルトの照合でこれが起こるのはなぜですか?これが役立つケースは考えられません。バイナリ照合を使用して動作を回避できることはわかっていますが、デフォルトの照合を実装する奇妙な方法のようです。 数字をフィルタリングすると、数字以外の文字が生成されます すべての可能なシングルバイト文字値を含む列を作成し、数字一致述語で値をフィルタリングすることにより、動作を実証できます。 次のステートメントは、現在のコードページの各コードポイントに1つずつ、256行の一時テーブルを作成します。 WITH P0(_) AS (SELECT 0 UNION ALL SELECT 0), P1(_) AS (SELECT 0 FROM P0 AS L CROSS JOIN P0 AS R), P2(_) AS (SELECT 0 FROM P1 AS L CROSS JOIN P1 AS R), P3(_) AS (SELECT 0 …

3
SQL Serverクエリがメモリで実行されているかディスクに移動しているかを判断する方法はありますか?
今日、アプリケーションで一連のストアドプロシージャに出くわしました。これらは、長時間実行されるプロセス内で繰り返し呼び出されます。各プロシージャ内で、複数の異なるselectステートメントを見つけました。一部はループ内です。当然のことながら、現在使用されているこれらのルーチンの実行には数分かかりますが、直観では数秒で完了すると予想されます。 これらの手順が書かれたとき、パフォーマンスが考慮されなかったことはかなり明白であるように見えます。「良いアイデアではない」もののインスタンスが複数あります。 データのインポート時の各行の処理には1行あたり300ミリ秒かかるため、比較的小さなインポートの処理には数分かかります。 ただし、手順に含まれるテーブルの大部分は非常に小さいものです。これらのテーブルのすべてがメモリに完全に常駐している場合、おそらくこのいずれかを書き換えても得られるものはそれほど多くないと考えています。 私は決定しようとしている....この明らかに非効率的なコードのために、それはどれほどの本当の影響を与えているのか?修正する価値はありますか? 質問は次のとおり です。-完全にメモリに固定されているテーブルを特定する方法はありますか? -ネストされたストアドプロシージャを監視して特に高価な部分を見つけるために、トレースをオンにする方法はありますか? 注:これはSQL Server 2008 R2にあります

4
SQL Serverエージェントを使用して、データベース以外のタスクもスケジュールしています-これは悪い考えですか?
私はDBA(および多くの場合、事実上のsysadmin)であるため、SQL Serverは、定期的に作業する必要があるほとんどすべてのサーバーにインストールされます。最近、ネイティブWindowsタスクスケジューラではなく、ほとんどすべての場合にジョブスケジューラとしてSQLエージェントを使用していることに気付きました。 私の観点から見ると、SQLエージェントには、ネイティブのWindowsタスクスケジューラーよりも多くの利点があります。 リモート(私のワークステーションから)タスクの開始/停止/監視 共有スケジュール(各タスク自体ではなく) 複数のステップと制御フロー さまざまな種類のタスク 失敗/完了のアラート 異なるユーザーとして動作するように構成できます (中程度)エラーコードではなく、説明的なエラーメッセージ しかし、これは悪い習慣であるという感覚から逃れることはできません-SQLエージェントはデータベース関連のタスクのためだけに予約する必要があり、その使いやすさを嫌いながらも、WindowsレベルのタスクスケジューラでOSレベルのタスクを実行したままにする必要があります。 この方法でSQLエージェントに依存しても大丈夫ですか?そうでない場合、探している機能の一部を取得するために、サードパーティのWindowsタスクスケジューラを検討する必要がありますか?

5
SQL ServerのROW_NUMBERでページングは​​どのように機能しますか?
Employee100万件のレコードを持つテーブルがあります。Webアプリケーションでデータをページングするための次のSQLがあります。正常に動作しています。しかし、私が問題と思うのは、派生テーブルtblEmployeeがEmployeeテーブル内のすべてのレコードを選択することMyRowNumberです(値を作成するため )。 これにより、Employeeテーブル内のすべてのレコードが選択されると思います。 それは本当にうまくいくのでしょうか?または、SQL Serverは元のEmployeeテーブルから5つのレコードのみを選択するように最適化されていますか? DECLARE @Index INT; DECLARE @PageSize INT; SET @Index = 3; SET @PageSize = 5; SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY EmpID asc) as MyRowNumber,* FROM Employee) tblEmployee WHERE MyRowNumber BETWEEN ( ((@Index - 1) * @PageSize )+ 1) AND @Index*@PageSize


1
SQL Server Profilerでトレース中に、プロシージャ呼び出しで着信パラメーター値を記録することは可能ですか?
SQL Server Profiler(私はSQL Server 2012を使用しています)を使用して、変数名を持つSQLだけでなく、パラメーター値を示す便利なトレースを生成しようとしています。ストアドプロシージャは、大量のインベントリデータを調べて非常に価値のある結果を生成します。既存の動作を文書化しようとしているので、ユニットテスト、正確な定義、およびリファクタリングを行って、適切なものにリファクタリングできます。 ストアドプロシージャがカーソルを作成し、whileループを実行するループ内で、54パラメーターサブプロシージャの実行を実行するストアドプロシージャがあります。これは簡略化されたビューです。 CREATE PROCEDURE [dbo].[OuterProcedure] ( @ProductCode varchar(8), -- 41 more parameters omitted ) AS SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SET NOCOUNT ON DECLARE @AboutFourHundredLocalvariables -- omit about 400 local variable declarations. -- OMIT ABOUT 10 temporary table declarations. DECLARE aCursor CURSOR FAST_FORWARD FOR SELECT …

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