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

时间:2015-11-17 18:01:02

标签: c# sql-server batch-file

我知道大多数人会给出响应,例如,右键单击数据库名称,选择任务,生成脚本等。大多数人在互联网上提供详细响应包括stackoverflow

很久以前我就已经知道了。

我的问题是编写脚本以导出/导入存储过程的任何建议。如果我只需做5或10,那就没什么大不了的了。我只需挑选正确的。如果有很多像50或更多,很痛苦,一定是错误。有时,为了让生活更轻松,我们希望使用 SELECT * FROM ( SELECT T1.*, ROW_NUMBER() OVER (PARTITION BY A, B ORDER BY C, D) AS RN FROM T1 ) X WHERE RN = 1 等后缀导出/导入。

有任何建议使用SQL脚本,C#或dos命令吗?

谢谢

2 个答案:

答案 0 :(得分:0)

为什么在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_IDENTIFIER设置为ON。

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

答案 1 :(得分:0)

因为你也标记了C#。使用.NET,您可以使用Microsoft.SqlServer.Smo来完成。有一个StoredProcedure class。这种方法可以让您真正控制您想要实现的任务。您可以使用PowerShell找到here的示例用法。

这是我可以帮助您的一个片段(使用Microsoft.SqlServer.SmoMicrosoft.SqlServer.ConnectionInfoMicrosoft.SqlServer.Management.Sdk.Sfc DLL):

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);
    }
}