当前位置:  开发笔记 > 编程语言 > 正文

以编程方式获取所有存储过程的简单方法

如何解决《以编程方式获取所有存储过程的简单方法》经验,为你挑选了2个好方法。

有没有办法使用C#从SQL Server 2005 Express数据库获取存储过程?我想以与使用SQL Server Management Studio编写脚本相同的方式导出所有这些数据,而无需安装GUI.

我已经看到一些引用通过PowerShell做的事情,但最后一个C#控制台应用程序是我真正想要的.

澄清....

我想编写存储过程的脚本.通过它的列表Select * from sys.procedures是有帮助的,但最后我需要编写每个这样的脚本.



1> Pavel Chuchu..:

您可以使用SMO.首先,将对这些程序集的引用添加到项目中:

Microsoft.SqlServer.ConnectionInfo

Microsoft.SqlServer.Smo

Microsoft.SqlServer.SmoEnum

它们位于GAC中(浏览到C:\ WINDOWS\assembly文件夹).

使用以下代码作为脚本存储过程的示例:

using System;
using System.Collections.Generic;
using System.Data;
using Microsoft.SqlServer.Management.Smo;

class Program
{
   static void Main(string[] args)
   {
      Server server = new Server(@".\SQLEXPRESS");
      Database db = server.Databases["Northwind"];
      List list = new List();
      DataTable dataTable = db.EnumObjects(DatabaseObjectTypes.StoredProcedure);
      foreach (DataRow row in dataTable.Rows)
      {
         string sSchema = (string)row["Schema"];
         if (sSchema == "sys" || sSchema == "INFORMATION_SCHEMA")
            continue;
         StoredProcedure sp = (StoredProcedure)server.GetSmoObject(
            new Urn((string)row["Urn"]));
         if (!sp.IsSystemObject)
            list.Add(sp);
      }
      Scripter scripter = new Scripter();
      scripter.Server = server;
      scripter.Options.IncludeHeaders = true;
      scripter.Options.SchemaQualify = true;
      scripter.Options.ToFileOnly = true;
      scripter.Options.FileName = @"C:\StoredProcedures.sql";
      scripter.Script(list.ToArray());
   }
}

另请参阅:SQL Server:SMO脚本基础知识.



2> SqlACID..:

只需从SYS.PROCEDURES中读取SELECT NAME的输出,然后为每个存储过程调用EXEC sp_HelpText SPNAME,您将获得每行一行文本的记录集.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有