Ich versuche nur, Tabellen in Benutzerdatenbanken abgesehen von Systemdatenbanken zu erstellen.Schleife Skript funktioniert nicht
hier ist das Skript
Declare @V table (ID INT,name varchar(100))
DECLARE
@DatabaseName VARCHAR(50),
@SQL NVARCHAR(MAX)
INSERT INTO @V(Id,name)
select ROW_NUMBER()OVER(ORDER BY NAME),
name
from sys.databases
where database_id >= 5
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
set @Name = @DatabaseName
SET @SQL = N'USE ' + QUOTENAME(@DatabaseName)
+'CREATE TABLE T(ID INT)';
SET @LoopCounter = @LoopCounter + 1
-- PRINT(@DatabaseName);
--PRINT(@SQL);
EXECUTE(@SQL)
END
warum ist es nicht Tabelle dynamisch erstellen?
wie nur Benutzerdatenbanken in unter Skript
statt
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
Sie sollten dies stattdessen verwenden: [Eine zuverlässigere und flexiblere sp_MSforeachdb - Aaron Bertrand] (https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb /) – SqlZim
ja ich habe dieses Skript, aber müssen in diesem Loop scriiit @Aaron tun – mohan111
Wird das nicht etwas wie 'USE MYDB1CREATE TABLE' erstellen? Anstelle aller Schleifenzähler usw. können Sie auch einfach den Cursor verwenden. –