将SQL Server脚本文本导入到Excel中

我有很多视图和存储过程,我需要定期查看,为此,我将SQL Server中的TSQL粘贴到一个Excel电子表格中,我可以创build公式来分析它。

有没有一种方法(使用VBA?)将定义的视图或存储过程中的实际脚本导入Excel中的单元格?

所以只是为了确认,我想返回脚本,而不是执行脚本的结果。

非常感谢

从SQL的angular度来看,您可以使用此查询来获取视图文本:

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 [name] = 'Procname' AND [Type] = 'P' 

编辑:这里是一个快速的VBA函数来返回这个数据,只需要replace连接的细节:

 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 

你也可能会发现exec sp_helptext对此很有用,因为它将输出分成单独的行而不是一列,这可能使得在Excel中查看更容易。

 exec sp_helptext "YourView/SP" 

您可以通过检查sys.proceduressys.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'