首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多个数据库中一次执行脚本

如何在多个数据库中一次执行脚本
EN

Stack Overflow用户
提问于 2017-01-25 19:26:27
回答 1查看 1.1K关注 0票数 1

在Sql Server中

我有示例脚本

代码语言:javascript
复制
Declare @V table (name varchar(100))
INSERT INTO @V(name)
 select name  from sys.databases where database_id > 6

select NAME from @V

如果我执行这个脚本,我会得到用户数据库列表

在我的实例中,我有以下数据库:

代码语言:javascript
复制
DatabaseName
mohan
Ravi

如何将数据库名称动态追加到下面的脚本中并在下面的数据库中执行该脚本

代码语言:javascript
复制
Declare @V table (ID INT,name varchar(100))
INSERT INTO @V(Id,name)
 select ROW_NUMBER()OVER(ORDER BY NAME),name  from sys.databases where database_id > 6

 DECLARE @LoopCounter INT , @MaxId INT, 
        @Name NVARCHAR(100)
SELECT @LoopCounter = min(id) , @MaxId = max(Id) 
FROM @V

WHILE(@LoopCounter IS NOT NULL
      AND @LoopCounter <= @MaxId)
BEGIN
   SELECT @Name = Name
   FROM @V WHERE Id = @LoopCounter

   PRINT @Name  
   SET @LoopCounter  = @LoopCounter  + 1        
END


DECLARE @DatabaseName VARCHAR(50) =   @Name
    , @SQL NVARCHAR(MAX);

SET @SQL = N'USE ' + QUOTENAME(@DatabaseName)
+'CREATE TABLE T(ID INT)';

--PRINT(@SQL);


EXECUTE(@SQL);

因此,在所有用户数据库中,将创建表。我尝试过使用sp_msforeachdb

脚本:

代码语言:javascript
复制
DECLARE @Sql AS VARCHAR(4000)
SET @Sql = 'IF ''?'' NOT IN (''master'',''tempdb'',''model'',''msdb'',''ReportServer'',''ReportServerTempDB'') 
                        EXECUTE ('' USE [?] CREATE TABLE T (ID INT)'')'
                        EXEC sp_MSforeachdb @command1 = @Sql

但是我正在寻找循环脚本.How,以便将这些名称附加到脚本中

EN

回答 1

Stack Overflow用户

发布于 2017-01-25 19:44:23

这里不需要循环。您可以在一遍中生成整个语句。此查询填充包含多个USE和CREATE TABLE语句的var:

代码语言:javascript
复制
DECLARE @Qry NVARCHAR(MAX) = '';

-- Build dynamic SQL statement here.
-- 1 Row returned per target database .
SELECT
    @Qry +=  
        '
            USE' + QUOTENAME(Name) + ';

            CREATE TABLE T
                (
                    ID INT 
                )
            ;
        ' 
FROM    
    sys.Databases
WHERE
    database_id > 6
;


-- Remove comments from last line when happy with query.
PRINT @Qry
--EXECUTE sp_ExecuteSQL @Qry

返回

代码语言:javascript
复制
USE [X];

CREATE TABLE T
    (
        ID INT
    )
;

USE [Y];

CREATE TABLE T
    (
        ID INT
    )
;
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41850429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档