Kør samme kommando på ALLE databaser på en SQL server
Hej,
Jeg har et meget lille SQL script som gør følgende:
if exists (Select * from EE where name = 'NAME') BEGIN Update EE SET EEdata ='
' where name ='NAME'
END ELSE BEGIN INSERT INTO dbo.EE (Name) VALUES ('NAME') END
Scriptet gør det som er tiltænkt! Tjekker om der findes en værdi svarende til name. Hvis ja, opdateres den og hvis nej, oprettes den..... bum....
Men jeg har et antal vilkårligt antal databaser på denne server....... og vil gerne køre scriptet på ALLE databaserne, som indeholder en tabel som hedder EE
Sidenhen kan jeg lave et planlagt job, som udfører opgave en gang dagligt.
Jeg har forsøgt mig lidt med Google, men har ikke lige ramt den rigtige kombination af kommandoer....
--Vælg alle tabeller som hedder EE på tværs af databaser i en temp table SET NOCOUNT ON DECLARE @AllTables table (CompleteTableName nvarchar(4000)) INSERT INTO @AllTables (CompleteTableName) EXEC sp_msforeachdb 'select ''?''+''.''+s.name+''.''+t.name from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id where t.Name =''ee''' SET NOCOUNT OFF;
--Opret en cursor til at loope over hver tabel DECLARE @TableName nvarchar(100) DECLARE @Table nvarchar(100) DECLARE @SQL nvarchar(max) DECLARE myCursor CURSOR FOR SELECT * FROM @AllTables
OPEN myCursor
FETCH NEXT FROM myCursor INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Cursor starter ' + @TableName
SET @SQL = 'if exists (Select * from '+@TableName+' where name = ''NAME'') BEGIN Update '+@TableName+' SET EEdata ='''' where name =''NAME''
END ELSE BEGIN INSERT INTO '+@TableName+' (Name) VALUES (''NAME'') END ' PRINT @SQL EXEC (@SQL)
FETCH NEXT FROM myCursor INTO @TableName END CLOSE myCursor DEALLOCATE myCursor
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.