定期的に確認する必要があるビューとストアド プロシージャが多数あります。そのために、SQL Server から TSQL を Excel スプレッドシートに貼り付け、そこで数式を作成して分析します。
実際のスクリプトを定義済みのビューまたはストアド プロシージャから Excel のセルにインポートする方法 (VBA を使用) はありますか?
確認のために、スクリプトの実行結果ではなく、スクリプトを返したいと思います。
どうもありがとう
定期的に確認する必要があるビューとストアド プロシージャが多数あります。そのために、SQL Server から TSQL を Excel スプレッドシートに貼り付け、そこで数式を作成して分析します。
実際のスクリプトを定義済みのビューまたはストアド プロシージャから Excel のセルにインポートする方法 (VBA を使用) はありますか?
確認のために、スクリプトの実行結果ではなく、スクリプトを返したいと思います。
どうもありがとう
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
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'