Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 server SQL Server:在所有数据库上运行脚本_Sql Server_Tsql - Fatal编程技术网

Sql server SQL Server:在所有数据库上运行脚本

Sql server SQL Server:在所有数据库上运行脚本,sql-server,tsql,Sql Server,Tsql,我有一个SQL脚本,其中包含一个函数(函数在脚本末尾删除)和临时表定义和变量,用于处理数据,为数据库提供一行结果 它可以工作,但我需要运行并获得1000个数据库的所有结果。似乎不可能单独运行脚本 我找到了sp_MSForEachDB单个命令行示例,但我有一个完整的脚本,无法以这种方式工作 有没有办法在所有数据库上运行脚本 感谢您在SSMS中回复Hi,您可以使用sqlcmd命令为所选数据库运行脚本。 这里举个例子,我想在两个不同的数据库中运行我的脚本,因为我已经在本地保存了我的脚本。并使用:r“C

我有一个SQL脚本,其中包含一个函数(函数在脚本末尾删除)和临时表定义和变量,用于处理数据,为数据库提供一行结果

它可以工作,但我需要运行并获得1000个数据库的所有结果。似乎不可能单独运行脚本

我找到了
sp_MSForEachDB
单个命令行示例,但我有一个完整的脚本,无法以这种方式工作

有没有办法在所有数据库上运行脚本


感谢您在SSMS中回复Hi,您可以使用sqlcmd命令为所选数据库运行脚本。 这里举个例子,我想在两个不同的数据库中运行我的脚本,因为我已经在本地保存了我的脚本。并使用:r“C:\temp\test1.sql”调用它

我仍然在考虑另一种使用循环的方法

启用sql模式SSMS>QUERY>SQLCMD模式

use test
:r  "C:\temp\test1.sql"
use S2VTST6
:r  "C:\temp\test1.sql"

我并不是说这是一个好主意,因为我们不知道您正在运行的脚本是做什么的,但这应该是可行的。我并不羡慕您在正确的位置获得所有单引号的痛苦,但这是我们为使用未记录、不受支持的存储过程而付出的代价

DECLARE @sqlText varchar(max); 

SET @sqlText = 'IF ''?'' NOT IN(''master'', ''model'', ''msdb'', ''tempdb'') 
  BEGIN 
    USE ? 
    EXEC(''CREATE <functions, tables, what have you>'') 
  END';

EXECUTE sp_MSforeachdb @sqlText;
DECLARE@sqlText-varchar(max);
设置@sqlText='如果'?'不在('master'、'model'、'msdb'、'tempdb''中)
开始
使用?
执行(“创建”)
结束';
执行sp_MSforeachdb@sqlText;

此脚本的具体功能是什么?您说它删除并创建了函数,但也创建了临时表(因此它们不会在以后持久化,这意味着这不是一件永久性的事情)。你的实际目标是什么?这可能是一个xy问题。函数和临时表只是用来处理数据,这没有问题。我的实际目标是通过运行一个查询脚本从数据库中获得结果。但是我有1000个数据库,我希望将所有结果放在一起。但该脚本告诉了你什么。。?很明显,它返回了一些数据,那么,它在做什么呢?我冒昧地猜测,它可以在不创建临时表和函数的情况下实现。就像@hakeerMirza给你的链接告诉你的一样;与其问我们如何完成你的解决方案Y,不如告诉我们你的问题X。正如已经告诉你的那样,试着提供更多关于你实际目标的信息。我的假设正确吗,所有这些数据库都位于不同的服务器中?您知道吗,您可以通过“注册服务器”一次触发针对所有服务器的脚本?请提供更多的背景资料。。。