これが以前に尋ねられた場合は申し訳ありませんが、提案された「関連する」質問は関連性がなく、私自身の検索はほとんど見つかりませんでした。
すべてのストアドプロシージャの定義(コード)を一覧表示する必要があります。これにより、450個すべてのストアドプロシージャを処理し、セミコロンを追加してv2014標準に向けて作業を開始できます。
私は次のコード here を見つけ、それをわずかに変更しました:
SELECT
obj.Name AS SPName,
REPLACE(modu.definition, 'CREATE PROC', 'ALTER PROC') + 'GO' AS SPDefinition
FROM
sys.sql_modules modu INNER JOIN
sys.objects obj ON modu.object_id = obj.object_id
WHERE
(obj.type = 'P')
ORDER BY
obj.name;
上記のコードは、SAアカウントを使用して実行されます。
私は仮定これが私が必要とするものを正確に提供したと思っていますが、MSDNの誰かが それが表示されないと主張していることに気づきました全文 期待どおり。
結果をSSMSエディターに貼り付けると、46,000行のコードを処理するため、不足しているものがあるかどうかはわかりません。エディターで1日を無駄にする前に、このプロセスを正しく開始したことを確認します。
したがって、これがこのアプローチの真の欠点であるのか、それとも1つずつではなく別の方法があるのかを尋ねるように、プロに連絡します。
MSDNで言及されている問題は、_sys.sql_modules
_またはOBJECT_DEFINITION()
とは関係ありません。彼らは問題を誤って解釈した。実際に起こったのは、それらがManagement Studioの出力制限によって妨げられたことです。これは、デフォルトでは255文字のみを表示し、結果からテキストへの出力タプルでは最大8192を表示します。
したがって、まず、これを8192に変更してください。
ツール>オプション>クエリ結果> SQL Server>テキストへの結果>
各列に表示される最大文字数
これで、4K未満のすべての手順に対して1つのスクリプトを作成できます。
_SELECT REPLACE(m.definition, N'CREATE PROC', N'ALTER PROC')
+ CHAR(13) + CHAR(10) + N'GO'
FROM sys.sql_modules AS m
INNER JOIN sys.procedures AS p
ON m.[object_id] = p.[object_id]
WHERE LEN(m.definition) <= 4000
ORDER BY p.name;
_
(もちろん、置き換えは単純です-_create procedure
_(複数のスペース)がある場合、または大文字と小文字を区別する照合を使用している場合はどうなりますか?それらのいくつかを手動で修正する必要がある場合があります。)
これで、大規模なプロシージャのスクリプトを手動で取得することだけを気にする必要があります。まず、何かあるかどうかを確認します。
_SELECT name
FROM sys.procedures
WHERE LEN(OBJECT_DEFINITION([object_id])) > 4000;
_
ここでいくつかの回避策について少し説明します(動的SQLのコンテキストでは、変数にOBJECT_DEFINITION()
を割り当てた場合も同じです)。
Magoo氏は正解です 、Management Studio内のスクリプト機能を使用すると、完全な定義を取得できます。切り捨てについて心配する必要はありません。
modify
または_script as > alter to >
_tasks > generate scripts >
_を実行します(ただし、これはCREATE
ではなくALTER
を実行するため、置換を実行する必要があります)余談ですが、あらゆる場所にセミコロンを追加している間、すべてのプロシージャがスキーマのプレフィックス(procedurename
だけでなく_dbo.procedurename
_など)を使用して作成され、すべてのオブジェクトに対しても作成されるようにすることをお勧めしますプロシージャ内の参照。それらは 問題を引き起こす可能性が高い よりずっと前に セミコロンの欠如はこれから です。また いくつかの一般的なこと 変更を行う際に留意してください。
SQL Server Management Studioのオブジェクトエクスプローラーを使用して、一度に1つの手順で上から移動します。
手順リストの一番下から同じことを行うことで、あなたとあなたの友人の間で作業を簡単に分割できます。そして、休憩などに行く必要があるときに、コードの半分が完了した巨大な壁が残ることはありません。
また、自分が行う作業と他の誰かが同じ手順で行った作業との間で編集の競合が発生する可能性がある期間を最小限に抑えることができます。 4日間のコード編集の4日後、最終的に46,000行のコードを実行すると、編集中に他の誰かが行ったことを上書きする可能性があります。ソース管理を使用する場合(そして使用する必要がある場合)、変更をマージする必要があるのは「唯一」です。