2

レポートの特定のビューを変更したり、アプリケーションで追跡しているアプリケーションフィールドのメタデータに基づいていないビューを変更したりすることができます。これらのフィールドは実行時に作成できます。フィールドが追加または削除されたときにビューを変更するための標準的なプロセスがあります。ただし、これをプログラムで実行する必要があります。つまり、現在のAlterビュースクリプトをプルし、変更を加えてから、データベースに対して実行できる必要があります。最後の2つのステップは十分に簡単ですが、最初の部分は私にいくつかの問題を与えています。

設計上の決定はさておき(この特定の例では私の手に負えないため)。SQL ServerManagementStudioが[表示]->[編集]コマンドに使用するビューの変更スクリプトを取得する方法を知りたいです。

スクリプトにコメントフックがあり、編集を実行できるため、そのコマンドとまったく同じ出力が必要です。

関連する質問ですが、私が探しているものとは異なります。

SQL Server Management StudioGUIによって返されるソースと同一のSQLServerストアドプロシージャソースをプログラムで取得するにはどうすればよいですか?

MSSQLで、特定のテーブルに対してCREATE TABLEステートメントを生成するにはどうすればよいですか?

4

4 に答える 4

6

SSMSはSMOを内部で使用します。Scripterは、任意のSQLオブジェクトの定義を取得できます。

T-SQLベースのアプローチが必要な場合は、sys.sql_modulesを使用します。これには、ビューを含む、データベース内の暗号化されていないすべてのオブジェクトのT-SQL定義が含まれています。

于 2009-11-19T19:11:05.643 に答える
4
SELECT [definition] 
FROM sys.sql_modules
WHERE [object_id] = OBJECT_ID('dbo.' + @ViewName);

-- you don't need the type check if you are passing in the name of a view
-- you can do the schema check using OBJECT_ID instead of an extra join

-- if you want to reference system_sql_modules it is unlikely they
-- will have dbo schema, if you want to support this use a separate query IMHO
于 2009-11-19T21:45:49.173 に答える
3

View作成スクリプトは、Information_Schema.Viewsテーブルから取得できます。

SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='<view name>'

そこから、必要に応じて変更して、ALTERを作成できます。

于 2011-02-18T17:13:31.283 に答える
0

やっと答えが出たと思います。SQLプロファイラーをざっと見て、次のように変更したクエリに出くわしました。

DECLARE @ViewName VARCHAR(255)

SET @ViewName = N'vwMyView'

SELECT
    ISNULL(smv.definition, ssmv.definition) AS [Definition]
FROM
    sys.all_views AS v
    LEFT OUTER JOIN sys.sql_modules AS smv ON smv.object_id = v.object_id
    LEFT OUTER JOIN sys.system_sql_modules AS ssmv ON ssmv.object_id = v.object_id
WHERE
    (v.type = 'V') and (v.name = @ViewName and SCHEMA_NAME(v.schema_id) = N'dbo')

これにより、ビュースクリプトがコメント付きの「ビューの作成」ddlステートメントとして返されます。ただし、1行なので、コメントの後に改行を挿入する必要があります。これがどれほど実行可能であるかを確認する必要があります。

于 2009-11-19T19:21:54.280 に答える