Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用多种语句类型自动化SQL脚本_Sql_Sql Server_Visual Studio_Ssis - Fatal编程技术网

使用多种语句类型自动化SQL脚本

使用多种语句类型自动化SQL脚本,sql,sql-server,visual-studio,ssis,Sql,Sql Server,Visual Studio,Ssis,我有一个SQL脚本,当我逐行遍历它时,它的工作方式完全符合我的要求。起初,这是一个可行的选择,但随着时间的推移,脚本已经变得越来越大,现在逐步通过它很糟糕 我曾尝试在VisualStudio中将脚本作为SSIS包的一部分运行,但这给了我奇怪的结果 我有一种感觉,这是因为我在脚本中使用了混合语言(即多个UPDATE、ALTER、SELECT-INTO、statements)是否有一种方法可以自动执行此脚本,使其逐行运行,就好像我正在逐行执行一样? 仁慈点。谢谢你 一般来说。您只需要在每条语句后面加

我有一个SQL脚本,当我逐行遍历它时,它的工作方式完全符合我的要求。起初,这是一个可行的选择,但随着时间的推移,脚本已经变得越来越大,现在逐步通过它很糟糕

我曾尝试在VisualStudio中将脚本作为SSIS包的一部分运行,但这给了我奇怪的结果

我有一种感觉,这是因为我在脚本中使用了混合语言(即多个UPDATE、ALTER、SELECT-INTO、statements)是否有一种方法可以自动执行此脚本,使其逐行运行,就好像我正在逐行执行一样?


仁慈点。谢谢你

一般来说。您只需要在每条语句后面加一个分号,这与语句类型无关。“Go”仅在您希望将其分为批处理时才需要(尽管如果您将代码传递给其他对象,例如ADO.NET命令对象,它可能不起作用)。如果您希望代码继续运行,而不考虑“go”之前代码的成功或失败,这将非常有用。如果您希望代码的延续依赖于前面的代码,只需确保在每个语句的结尾都有“;”

在进入下一个块之前,您需要提交DDL更改。我认为SQLServer使用GO。也许会有帮助。GO执行最后一个“GO”中的所有语句,因此,如果您正在对DDL进行更改,则可以在下一系列事务之前进行更新,从而允许更改生效。这是为了调试目的吗?为什么不将脚本拆分为多个包/多个存储过程?确定更多信息:这里:请小心,因为如果执行两次GO,其间没有脚本更改,我相信它将运行TSQL语句两次,如果将1添加到某个值,则可能最终添加2!我不相信你需要第一次尝试;我通常会先做DDL,然后再做go,然后再做数据更新,这样我就少了go。我不确定go是唯一的解决方案。我认为您还需要用分号终止每个查询。谢谢您。这是一个很好的例子,说明坏习惯是如何成为一个大规模问题的。你知道为什么要花这么长时间吗?我没花两个小时就手动完成了脚本…还是没有运气。脚本的一部分成功运行,但许多UPDATE语句从未出现,导致列中没有数据。您是否尝试将其设置为SSIS作业,每个语句都有SQL脚本任务?或者您可以在数据流任务中设置它?这两种方法都可以让您更清楚地了解遇到问题的地方。在您尝试运行它之后,查看输出并查找任何错误或警告消息。分号实际上解决了这个问题,我的脚本太大了,第一次就漏掉了几个点。再次感谢你的帮助。对我来说,下一步是弄清楚如何安排SSIS作业,自动提取数据和转换脚本,以便每晚睡觉时运行。太棒了!我总是这样做。您可以在数据流任务中设置此类内容,也可以将整个脚本放在SQL脚本任务中。我更喜欢使用数据流任务,因为您可以跟踪每次转换之间的行。