在Sql Server中
我有示例脚本
Declare @V table (name varchar(100))
INSERT INTO @V(name)
select name from sys.databases where database_id > 6
select NAME from @V如果我执行这个脚本,我会得到用户数据库列表
在我的实例中,我有以下数据库:
DatabaseName
mohan
Ravi如何将数据库名称动态追加到下面的脚本中并在下面的数据库中执行该脚本
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
脚本:
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,以便将这些名称附加到脚本中
发布于 2017-01-25 19:44:23
这里不需要循环。您可以在一遍中生成整个语句。此查询填充包含多个USE和CREATE TABLE语句的var:
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返回
USE [X];
CREATE TABLE T
(
ID INT
)
;
USE [Y];
CREATE TABLE T
(
ID INT
)
;
...https://stackoverflow.com/questions/41850429
复制相似问题