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

SQL Server 2008(メジャービルドバージョン10.00.xxxx)。また、sql-serverでタグ付けしてください。

1
SQL Serverのインデックス作成メモリ設定を変更するとどのような影響がありますか?
SQL Server 2008データベースにいくつかのインデックスを作成しようとしていますが、次のエラーメッセージが表示されます。 メッセージ8606、レベル17、状態1、行1このインデックス操作には、DOPあたり1024 KBのメモリが必要です。2のDOPの合計要件2048 KBは、高度なサーバー構成オプション「index create memory(KB)」に設定された704 KBのsp_configure値よりも大きくなっています。この設定を増やすか、DOPを減らしてクエリを再実行してください。 現在、インデックス作成メモリの設定は794KBに設定されており、クエリごとの最小メモリは1024KBに設定されています。これらの値を変更するとどのような影響がありますか?特にパフォーマンスに関して。それらを変更し、インデックスを作成して元に戻す必要がありますか、それとも0に設定する必要がありますか?

3
トリガーの発火順序を変更するには?
本当にトリガーを使用することはめったにありません。だから私は初めて問題に遭遇した。トリガーを持つテーブルがたくさんあります(すべてのテーブルに2つ以上)。すべてのテーブルのトリガーを起動する順序を知り、変更したいと思います。この情報を取得することは可能ですか? 追加: ここに私が見つけたmssqltips に関する良い記事があります。

1
地理的に異なる地域にあるDBを接続するためのベストプラクティス
さまざまな国でSQL Serverをセットアップしようとしています。リンクする必要がありますが、直接リンクする必要はありません(リンクサーバーのように)。言い換えれば、それらは疎結合できます。 それらをVPN経由で接続してリンクサーバーとして使用するか、Webサービス経由で疎結合を使用する方が良いでしょうか? 「より良い」とは、安定性を指します。

2
データが失われる可能性があるため、値を変換できませんでした[終了]
閉じた。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にしてください。 5年前に閉鎖されました。 まず、これが重複した質問ではなく、その問題の潜在的な重複でもないことを明確にすることから始めましょう。StackOverflowとDBA Stack Exchangeでこの問題の既存のすべてのバリアントに対するすべての答えを、運がなくても実装しようとしました。 私は過去2日間この問題に取り組んでおり(1日約7時間問題に取り組んでいます)、問題をグーグルで解決した後でも、他の誰も私の問題とまったく同じ変種を持っているようには見えません。 私は何をしようとしていますか? SSISで、CSVファイルから読み取り、そこから行をOLE DBデータベースに挿入しようとしています。そのため、以下に示すように、私はこれまでで最も簡単なセットアップを行いました。 Flat File Source -CSV行を読み取ります。 Derived Column -現在は何もしません(実験のためだけにあります)。 Data Conversion -現在は何もしません(実験のためだけにあります)。 OLE DB Destination -データベースに行を格納します。 実行しようとすると、OLE DB宛先で実行が停止し、次のエラーメッセージが表示されます。 入力「OLE DB宛先入力」(51)の入力列「金額」(187)でエラーが発生しました。返された列のステータスは、「データが失われた可能性があるため、値を変換できませんでした。」でした。 失敗した列(Amount)は現在タイプDT_STRです。それが今一番信頼しているタイプのようです。 私は何を試しましたか? Flat File Connection失敗している列で「推奨タイプ」関数を使用してみました。これにより、Single byte signed intデータ型が推奨されました。 で停止し、私のフラットファイルソース。 エラーは、データ変換が失敗したことです。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。 を使用しDerived Columnて列をにキャストしようとしましたDT_I4。 で停止し、私の派生列。 エラーは、データ変換が失敗したことです。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。 を使用しData Conversionて列の値をにキャストしようとしましたDT_I4。 私で停止しますData Conversion。 エラーは、データ変換が失敗したことです。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。 DT_STRソースと宛先の値の長さを変更してみました。 設定に応じて、ソースまたは宛先で停止します。 私の代わりに使用してExcelソース・コネクターを使用して接続しようとしたとすることなく、IMEX=1接続文字列に追加します。運がありません。 …

2
UPDATEステートメントのOUTPUTをローカル変数に送る
私はこれをしたいと思います: DECLARE @Id INT; UPDATE Logins SET SomeField = 'some value' OUTPUT @Id = Id WHERE EmailAddress = @EmailAddress -- this is a parameter of the sproc これは可能ですか?ローカルテーブル変数を宣言してそこに出力を送信できることはわかっていますが、可能であればスキップすることをお勧めします

3
時間間隔に基づくレコードのグループ化
次のスキーマのテーブルがあり、時間間隔(例:1分あたりのレコード数)に基づいてデータをグループ化できるクエリを定義し、前のグループ以降のSnapShotValueへの変更の合計を提供する必要があります。現時点では、SnapShotValueは常に増分するため、差分の合計のみが必要です。誰かがこれを行う可能性のあるSQL Server T-SQLクエリを手伝ってくれる?私はスキーマを変更することにオープンですが、これは私が現在持っているものです。 スキーマ CaptureTime (datetime) SnapShotValue (int) サンプルデータ 1 Jan 2012 00:00:00, 100 1 Jan 2012 00:00:30, 125 1 Jan 2012 00:01:00, 200 1 Jan 2012 00:01:30, 300 1 Jan 2012 00:02:15, 400 1 Jan 2012 00:02:30, 425 1 Jan 2012 00:02:59, 500 必要なクエリ結果 1 Jan 2012 00:01:00, 225 …

5
トリガーでINSERTEDテーブルとDELETEDテーブルを結合する恐ろしいパフォーマンス
特定の列が特定の値から他の値に変更されるのを監視するテーブルにUPDATEトリガーがあります。これが発生すると、単一のUPDATEステートメントを介して別のテーブル内の関連データを更新します。 トリガーが最初に行うことは、更新された行にこの列の値が問題の値から変更されているかどうかを確認することです。単にINSERTEDをDELETEDに結合し、その列の値を比較します。適格なものがなければ、早期にベイルアウトするため、UPDATEステートメントは実行されません。 IF NOT EXISTS ( SELECT TOP 1 i.CUSTNMBR FROM INSERTED i INNER JOIN DELETED d ON i.CUSTNMBR = d.CUSTNMBR WHERE d.CUSTCLAS = 'Misc' AND i.CUSTCLAS != 'Misc' ) RETURN この場合、CUSTNMBRは基礎となるテーブルの主キーです。このテーブルで大規模な更新(たとえば、5000行以上)を実行すると、CUSTCLAS列に触れていなくても、このステートメントでAGESがかかります。プロファイラーでこのステートメントが数分間停止するのを見ることができます。 実行計画は奇妙です。挿入されたスキャンが3,714回実行され、出力行が約1,850万行あります。CUSTCLAS列のフィルターを通過します。これは(ネストされたループを介して)削除されたスキャン(これもCUSTCLASでフィルタリングされます)に結合されます。これは1回だけ実行され、5000出力行を持ちます。 これを引き起こすために私はここでどんな馬鹿げたことをしていますか?トリガーは絶対に複数行の更新を適切に処理する必要があることに注意してください。 編集: 私はこれもこのように書いてみました(EXISTSが不愉快なことをしている場合に備えて)、それでも同じくらいひどいです。 DECLARE @CUSTNMBR varchar(31) SELECT TOP 1 @CUSTNMBR = i.CUSTNMBR FROM INSERTED i INNER JOIN …

4
実行中のジョブ内からジョブIDまたはジョブ名を取得する
すべてのサーバーでジョブの結果を書き戻す中央DBがあります。SQLジョブでpowershellを介して3つのパラメーターを中央サーバーのspに戻し、ジョブがその時点で実行されていることを確認します。次に、情報がSSRSを介して公開されるため、ジョブの失敗/長時間実行されているジョブ/ &まだ実行されていないはずのジョブ(または誰かがスケジュールをめちゃくちゃにした場合)。 これを行うには、すべてのサーバーの各ジョブに2つのジョブステップを追加します。スクリプトを各ジョブに1ステップだけ追加して、ネットワーク共有から呼び出すこともできます。 しかし、私の問題は、渡す3つのパラメーターの1つです。実行中のジョブ内から実行中のジョブIDまたはジョブ名を取得する必要があるので、nameパラメーターをハードコーディングする必要はありません。私が渡す3つのパラメーターは、jobid、status(success / fail)、errormsgです。私が書いたPowerShellスクリプトは非常に単純です。 Invoke-sqlcmd -ServerInstance "MYRemoteSYSTEM" -Database remoteDB -Query "exec dbo.JOB_LOG 'JOBNAME / ID'、 'Success / FAIL'、 'BAD MESSAGE HERE'" これにより、必要なものがテーブルに書き込まれます。msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs /を見てきましたが、実行中のジョブが複数ある場合に、正しい実行ジョブのIDまたは名前を取得できることは保証されません同時に。 私もsys.sysprocessesを調べてみましたが、エージェントジョブはpowershellスクリプトなので、「。Net SqlClient Data Provider」と表示されるので、「SQLAgent-」と表示されるジョブからバイナリJOBIDをトリミングできません。 TSQL JobStep(Job 0xF1800243164745429C30474FFD5C990C:Step 1) "---これはデニーチェリーの投稿から学んだ-感謝デニー - 実行中のジョブIDを取得する方法についてのアイデアは、大歓迎です。 おかげで、 クリス

2
1つのテーブルに存在しない行を含む行を表示するSQL結合クエリ
私は従業員の時間記録についていくつかのレポートを作成しようとしています。 この質問に特化した2つの表があります。従業員はMembersテーブルに一覧表示され、毎日、彼らが実行した作業の時間エントリを入力し、Time_Entryテーブルに保存されます。 SQL Fiddleでの設定例:http ://sqlfiddle.com/#!3/ e3806/7 私は行くよ最終結果は番組表であるALLMembers列リストで、その後は他の列に照会した日のために彼らの合計時間が表示されます。 問題はTime_Entry、特定のメンバーのテーブルに行がない場合、そのメンバーの行があることです。私はいくつかの異なる結合タイプ(左、右、内部、外部、完全外部など)を試しましたが、(SQL Fiddleの最後の例に基づいて)希望どおりの結果が得られないようです。 /*** Desired End Result ***/ Member_ID | COUNTTime_Entry | TIMEENTRYDATE | SUMHOURS_ACTUAL | SUMHOURS_BILL ADavis | 0 | 11-10-2013 | 0 | 0 BTronton | 0 | 11-10-2013 | 0 | 0 CJones | 0 | 11-10-2013 | 0 | 0 …

2
dbをコピーして名前を変更して、両方のコピーを添付できるようにします
サーバーに「mysite_db」というデータベースがあり、ローカルマシンに「mysite_db」でもあるコピーを作成しました。(ローカルマシンの)dbを、このdb名が既にあるサーバーに接続したいと思います。つまり、ローカルデータベースの名前を変更する必要があります(物理ファイルも変更する必要があると思います)。私はそれをする方法で迷っています。案内してもらえますか? 私の目標は、サーバーに2つのデータベースをロードすることです。例: 'mysite_db'と 'myNewSite_db'

2
NULL列をNOT NULLにすばやく変更する
何百万もの行とNULL値を許可する列を持つテーブルがあります。ただし、現在、その列にNULL値を持つ行はありません(クエリでこれをかなり迅速に確認できます)。ただし、コマンドを実行すると ALTER TABLE MyTable ALTER COLUMN MyColumn BIGINT NOT NULL; クエリは比較的長い時間かかります。実際には10〜20分かかり、チェック制約を追加する場合の2倍以上の時間がかかります。特にその列にNULL値を持つ行がないことを知っているので、その列のテーブルのメタデータを即座に更新する方法はありますか?

2
io_stall_writes_msがtempdbでこれほど高いのはなぜですか?
ユーザーとシステムのデータファイルは同じディスクドライブにあります。(io_stall_write_ms /(1.0 + num_of_writes))は、ユーザーファイルでは2未満ですが、tempdbファイルは通常400を超えています。いくつかのサーバーでは、tempdbに書き込むのに時間がかかる理由があるので興味があります通常のデータベースデータファイルよりも。 SELECT DISTINCT UPPER(LEFT(mf.physical_name, 1)) AS Directory, ( io_stall_write_ms / ( 1.0 + num_of_writes ) ) as result, io_stall_write_ms, num_of_writes, fs.database_id, fs.[file_id] FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS fs INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id AND fs.[file_id] = mf.[file_id] ありがとうございました、

2
SQL Serverデータベースはいつクエリを受け入れる準備ができていますか?
SQL Serverエラーログファイルで、次の行を見つけました。 2018-02-22 14:10:58.95 spid17s Starting up database 'msdb'. 2018-02-22 14:10:58.95 spid16s Starting up database 'ReportServer'. 2018-02-22 14:10:58.95 spid18s Starting up database 'ReportServerTempDB'. 2018-02-22 14:10:58.95 spid19s Starting up database 'XYZ'. この時間より前にデータベースXYZのステータスを確認するとONLINE、次のステートメントが使用されています。 SELECT state_desc FROM sys.databases WHERE name='XYZ' ...しかし、C#アプリケーションを使用してこのデータベースに接続しようとすると、データベースに接続できません。 エラーは: ユーザー「asd」のログインに失敗しました。 理由:明示的に指定されたデータベースを開くことができませんでした。 3つの異なるユーザー(Windowsユーザー、sa、アプリケーションに定義されたSQL Serverユーザー)を試しました。OSの起動時にアプリケーションを実行すると問題が発生しますが、起動後に手動で起動してもエラーは発生しないため、SQL Serverの設定とファイアウォールの設定はすべて正しいと思います。 この前に、サービスステータスが実行されていることも確認しました。 データベースが実際にオンラインでクエリの準備ができていることを確認するために、他に何をチェックする必要がありますか? 時間を遅らせるのではなく、データベースにクエリを実行しても問題ないことを示すキーを探しています(明確な理由に基づいていなくても)。 エラーログをスキャンして "Starting up …

1
SQLServer Upgrade Advisor 2014がハングする
SQL Server 2008サーバーに対してSQL Server Upgrade Advisor 2014を実行しようとしています。 2008サーバーに接続するとすべてが正常に見え、分析するデータベースを選択できます。 しかし、起動すると、何もせずに永久に実行されます(ステップルールの分析:0/112のままです)。 何が起こって、どうすれば修正できますか? SQL Server 2008と2014はどちらもExpressバージョンであり、私のラップトップにインストールされています。残念ながら、これはアップグレードアドバイザーを実行するために私が見つけた唯一の方法です(実際のprod / devデータベースで実行するには制限が多すぎます)。 SQL 2008インスタンスには、必要に応じてSP3が適用されます。 Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) アドバイザがフリーズすると、4つのスリープクエリが表示されます(アクティブなクエリはありません)。 SELECT name, cmptlevel FROM …

3
SQL Serverのバージョンに応じて、RAISERRORまたはTHROWを選択することはできますか?
これが私のコードです: BEGIN TRY INSERT INTO TABLE (F1,F2,F3) VALUES ('1','2','3') END TRY BEGIN CATCH ;THROW END CATCH SQL 2008が搭載されたマシンで実行しない限り、うまく機能します。CATCHブロックでSQLバージョンをチェックし、それが2012以上の場合はTHROWを実行し、2008の場合はRAISERRORを実行します。構文エラー、それが可能かどうか疑問に思っています。このような単純なものでさえ、私にはうまくいきません。 BEGIN CATCH IF ((SELECT SERVERPROPERTY('productversion')) >= 11) ;THROW END CATCH 任意のアドバイスをいただければ幸いです。

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