C# 导入/导出SQL Server存储过程的方法

C# 导入/导出SQL Server存储过程的方法,c#,sql-server,batch-file,C#,Sql Server,Batch File,我知道大多数人会给出这样的回答,右键单击数据库名称,选择任务,生成脚本,等等。大多数人在互联网上给出详细的回答,包括stackoverflow 我早就知道了 我的问题是关于编写脚本以导出/导入存储过程的建议。如果我只需要做5到10次,这不是什么大问题。我只要选对就行了。如果有很多像50或更多,这是痛苦的,必然是错误。有时,为了简化工作,我们希望导出/导入后缀,例如*test.sql 有没有建议使用SQL脚本、C或dos命令来执行此操作 谢谢当您在SQL或DOS脚本中询问答案时,为什么用C标记此问

我知道大多数人会给出这样的回答,右键单击数据库名称,选择任务,生成脚本,等等。大多数人在互联网上给出详细的回答,包括stackoverflow

我早就知道了

我的问题是关于编写脚本以导出/导入存储过程的建议。如果我只需要做5到10次,这不是什么大问题。我只要选对就行了。如果有很多像50或更多,这是痛苦的,必然是错误。有时,为了简化工作,我们希望导出/导入后缀,例如*test.sql

有没有建议使用SQL脚本、C或dos命令来执行此操作


谢谢

当您在SQL或DOS脚本中询问答案时,为什么用C标记此问题

此CMD脚本删除名称以usp开头的所有存储过程:

FOR /F "tokens=* USEBACKQ" %%F IN (`sqlcmd -S %SERVER% -d %DATABASE% -Q "select name from sys.objects where type = 'P'" `) DO (echo %%F | findstr "^usp" >nul 2>&1 && sqlcmd -S %SERVER% -d %DATABASE% -Q "drop procedure %%F" )
这都在一行上,%SERVER%和%DATABASE%标识服务器和数据库

此脚本从当前目录加载名称与usp*.sql匹配的所有存储过程。如果调用XML数据类型方法,则需要启用设置QUOTED\U标识符

for %%f in (usp*.sql) do sqlcmd  -S %SERVER% -d %DATABASE% -I -i %%f

由于您还使用.NET标记了C,因此可以使用。有一个问题。这种方法可以让你真正控制你想要完成的任务。您可以找到的示例用法,也可以使用PowerShell

以下是我整理的一个片段,可能有助于您使用Microsoft.SqlServer.Smo、Microsoft.SqlServer.ConnectionInfo、Microsoft.SqlServer.Management.Sdk.Sfc DLL:


谢谢哪个参数用于导出?我只是做了sqlcmd帮助,但找不到导出或脚本例程。编写批处理的一个原因是导出一堆文件。你确实写下了降落程序。尽管我不想编写一个批处理程序来删除一堆SP,但它仍然很有帮助。这风险太大了。哦,我标记C的原因,我只是好奇是否有一个API可以这样做。如果batch能够做到这一点,那么它就达到了目的。如何将存储过程导出到文本文件显示了几种技术。您可能希望在SSMS中打开数据库,右键单击数据库名称并选择Tasks->Generate Scripts;然后按照向导操作。任务->生成脚本是我已经知道的步骤。有一次,我不得不输出50+sp。这很痛苦,结果我输出了一个我不应该输出的sp。我也想念一对夫妇。当我必须在500+sp中导出50+sp时,很可能会单击错误的sp。我很快又要做同样的事了。这次我得为别人准备剧本。如果有一个更简单的方法就好了。我将尝试BCP_实用程序,我希望这会有所帮助
var serverConnection = new ServerConnection(new SqlConnection(ConnectionString));
var server = new Server(serverConnection);
foreach (StoredProcedure sp in server.Databases["YourDB"].StoredProcedures)
{
    if (sp.Name.Contains("yourSubstring"))
    {
        System.IO.File.WriteAllText(sp.TextHeader + Environment.NewLine + sp.TextBody);
    }
}