2

定期的に確認する必要があるビューとストアド プロシージャが多数あります。そのために、SQL Server から TSQL を Excel スプレッドシートに貼り付け、そこで数式を作成して分析します。

実際のスクリプトを定義済みのビューまたはストアド プロシージャから Excel のセルにインポートする方法 (VBA を使用) はありますか?

確認のために、スクリプトの実行結果ではなく、スクリプトを返したいと思います。

どうもありがとう

4

3 に答える 3

1

SQL の観点から、次のクエリを使用してビュー テキストを取得できます。

SELECT [definition]
FROM sys.sql_modules m 
INNER JOIN sys.objects o 
ON m.object_id=o.object_id
WHERE [name] = 'ViewName'
AND [type] = 'V'

procs の場合、WHERE を次のように変更します。

WHERE [name] = 'Procname'
AND [Type] = 'P'

編集:これは、このデータを返す簡単なVBA関数です。接続の詳細を置き換えるだけです:

Public Function GetObject(ByVal nm As String, ByVal Tp As String) As String

    Set objMyConn = New ADODB.Connection
    Set objMyRecordset = New ADODB.Recordset
    Dim strSQL As String
    Dim retval As String

    With objMyConn
      .ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=[MyID];Password=[MyPass];Data Source=[ServerName];" & _
      "Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;" & _
      "Tag with column collation when possible=False;Initial Catalog=[DBName]"
      .Open
    End With

    strSQL = "SELECT [definition] " & _
    "FROM sys.sql_modules m " & _
    "INNER JOIN sys.objects o ON m.object_id=o.object_id " & _
    "WHERE [name] = '" & nm & _
    "' AND [Type] = '" & Tp & "'"


    Set objMyRecordset.ActiveConnection = objMyConn
    objMyRecordset.Open strSQL

    Do While Not objMyRecordset.EOF

        retval = objMyRecordset.Fields("description").Value

        objMyRecordset.MoveNext

    Loop

    Set GetObject = retval

End Function
于 2013-09-03T15:13:31.130 に答える
0

sys.proceduresおよびsys.sql_modulesカタログ ビューを調べて、SQL Server からストアド プロシージャの "コード" (T-SQL 定義) を取得できます。

SELECT
    [pr].[name] ,
    [pr].[object_id] ,
    [pr].[type_desc] ,
    [pr].[create_date] ,
    [pr].[modify_date] ,
    [m].[definition] ,
    [m].[uses_ansi_nulls] ,
    [m].[uses_quoted_identifier] ,
    [m].[is_schema_bound] 
FROM sys.[procedures] pr
INNER JOIN sys.[sql_modules] m ON [pr].[object_id] = [m].[object_id]
WHERE pr.Name = 'whatever_stored_proc_name_you_want_to_analyze'

ビューについても同様です。

SELECT
    v.[name] ,
    v.[object_id] ,
    v.[type_desc] ,
    v.[create_date] ,
    v.[modify_date] ,
    [m].[definition] ,
    [m].[uses_ansi_nulls] ,
    [m].[uses_quoted_identifier] ,
    [m].[is_schema_bound] 
FROM sys.views v
INNER JOIN sys.[sql_modules] m ON v.[object_id] = [m].[object_id]
WHERE v.Name = 'whatever_view_you_want_to_analyze'
于 2013-09-03T15:13:00.090 に答える