問題タブ [tsql]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - xact_abort がオンの場合、Sql Server が raiserror 後に実行を続けるのはなぜですか?
TSQL の何かに驚きました。xact_abort がオンの場合、次のように呼び出すと思いました
ストアド プロシージャ (または任意のバッチ) の実行を停止します。
しかし、私の ADO.NET エラー メッセージは正反対であることがわかりました。例外メッセージに raiserror エラーメッセージが表示され、その後に次のエラーメッセージが表示されました。
これは私の回避策です(とにかくこれは私の習慣です)が、必要ではないようです:
ドキュメントには次のように書かれています。
SET XACT_ABORT が ON の場合、Transact-SQL ステートメントで実行時エラーが発生すると、トランザクション全体が終了し、ロールバックされます。
明示的なトランザクションを使用する必要があるということですか?
sql-server - 別のストアドプロシージャから、ストアドプロシージャの結果をカウントする最も効率的な方法は何ですか?
ストアドプロシージャでは、別のストアドプロシージャの結果のカウントを取得する必要があります。具体的には、結果が返されるのか、空のセットが返されるのかを知る必要があります。
一時テーブル/テーブル変数を作成し、それにストアドプロシージャを実行してから、そのデータに対してselectカウントを実行できます。しかし、私は実際にはデータ自体は気にしません。必要なのはカウント(またはデータの有無)だけです。その情報だけを取得するより効率的な方法があるかどうか疑問に思いました。
他のストアドプロシージャの内容をコピーして、選択カウントとして書き直したくありません。ストアドプロシージャは頻繁に変更されるため、実行できません。
database - 日時フィールドに日付のみを格納する最良の方法は?
シナリオ: ストアド プロシージャは、datetime パラメーターとして DateTime.Now 値などを含む DateTime をコードから受け取ります。ストアド プロシージャは、行の datetime の日付部分のみを格納する必要がありますが、時間間隔での検索や日付に基づくレポートの作成などのために、日付に関連するすべての演算を保持します。
いくつかの方法があることは知っていますが、パフォーマンスと無駄なスペースを考慮して、どの方法が良いでしょうか?
sql-server - SQL Server で熱心なスプール操作を回避する方法
ステートメントを多用するストアド プロシージャを含む ETL プロセスがありSELECT INTO
ます (最小限にログに記録されるため、生成されるログ トラフィックが少なくなるため高速になります)。1 つの特定のストアド プロシージャで行われる作業のバッチのうち、最もコストのかかる操作のいくつかは、クエリ結果をバッファリングし、作成中のテーブルにコピーするように見える熱心なスプールです。
熱心なスプールに関する MSDN ドキュメントは非常にまばらです。これらが本当に必要かどうか (そしてどのような状況で) について、より深い洞察を持っている人はいますか? 理にかなっているかもしれないし、そうでないかもしれないいくつかの理論がありますが、クエリからこれらを排除することに成功していません.
.sqlplan ファイルは非常に大きい (160kb) ため、フォーラムに直接投稿するのはおそらく妥当ではないと思います。
したがって、特定の回答に適している可能性のあるいくつかの理論を次に示します。
- クエリは、フォーマットされた日付の解析など、データ変換のためにいくつかの UDF を使用します。このデータ変換では、テーブルを構築する前に適切な型 (varchar の長さなど) をテーブルに割り当てるために熱心なスプールを使用する必要がありますか?
- 上記の質問の延長として、クエリでこの操作を駆動するものと駆動しないものについて、より深い見解を持っている人はいますか?
sql - 経過時間を合計する Transact-SQL
データベースに、特定のタスクの開始時刻と終了時刻を記録するテーブルがあります。データのサンプルを次に示します。
これらの時間枠の経過分数を合計するスクリプトを作成したいと思います。12/31/9999 の日付がある場合は、現在の日付と時刻を使用する必要があります。これはまだ進行中です。
Transact-SQL を使用してこれを行うにはどうすればよいですか?
sql-server - SQL サーバーのデータベース テーブルの TEXT 列を変更するにはどうすればよいですか?
SQL サーバー データベースに、NULL を許可するように設定された TEXT フィールドを含むテーブルがあります。NULL を許可しないようにこれを変更する必要があります。Enterprise Manager を使用してこれを問題なく実行できますが、次のスクリプトを実行しようとすると、テーブル dbo を変更します。[イベント ログ] 列を変更します [メッセージ] テキストが nullではありません。エラーが発生します。
「テキスト」であるため、列「ErrorMessage」を変更できません。
SQL Books Online を読むと、TEXT フィールドに対して ALTER COLUMN を実行することが許可されていないことが明らかになります。ただし、Enterprise Manager で手動ではなく、スクリプトを介してこれを実行できる必要があります。スクリプトでこれを行うためのオプションは何ですか?
sql - SQL Select 今後の誕生日
誕生日が近づいている従業員を選択するためのストアド プロシージャを作成しようとしています。
SELECT * FROM Employees WHERE Birthday > @Today AND Birthday < @Today + @NumDays
誕生年は誕生日の一部であるため、これは機能しません。つまり、私の誕生日が '09-18-1983' の場合、'09-18-2008' と '09-25-2008' の間には入りません。
日付フィールドの年の部分を無視して、月/日だけを比較する方法はありますか?
これは毎週月曜日の朝に実行され、マネージャーに誕生日が近づいていることを警告するため、新しい年にまたがる可能性があります。
これが、私が最終的に作成した実用的なソリューションです。Kogus に感謝します。
sql-server - 大規模な t-sql プロシージャをどのように維持しますか
非常に大規模なデータ セットを毎月処理する一連の大規模で複雑なストアド プロシージャを継承しようとしています。
VB6 で書かれた元のプロセスと一致するように、それらをデバッグ中です。t-sql で書き直すことにした理由は、vb プロセスに数日かかり、この新しいプロセスに数時間かかるためです。
これですべて問題ありませんが、これらの大量の t-sql コードのチャンク (1.5k 行以上) をリモートで読み取り可能/保守可能にするにはどうすればよいでしょうか。
t-sql をあまり頭が痛くならないようにした経験があれば大歓迎です。
sql-server - SQL サーバーで日付を指定する
SQL Server で、DATETIME を秒/分/時間/日/年に "フロアリング" するにはどうすればよいですか?
日付が2008-09-17 12:56:53.430であるとすると、フローリングの出力は次のようになります。
- 年: 2008-01-01 00:00:00.000
- 月: 2008-09-01 00:00:00.000
- 日: 2008-09-17 00:00:00.000
- 時間: 2008-09-17 12:00:00.000
- 分: 2008-09-17 12:56:00.000
- 2 番目: 2008-09-17 12:56:53.000
sql-server - どの SQL テーブルに ID 列があるかをプログラムで判断する方法
ID 列を持つ SQL Server 2005 の列のリストと、それに対応する T-SQL のテーブルを作成したいと考えています。
結果は次のようになります。
テーブル名、列名