Jag har en applikation där varje instans har en egen databas (ms sql 2000) Du kan alltid komma åt tabeller i en annan databas genom att skriva Tack, Jag var lite klantig verkar det som, lägger jag dit servernamnet så funkar det bra.Byta databas inne i cursor?
Nu vill jag vara lite smidig då jag uppdaterar den lite då och då...
Jag har ett skript som backar databaserna och då tänkte jag att jag kan ju lika gärna göra lite mer i dom medans det ändå loopas runt.
Backup skriptet
set nocount on
declare @name sysname
declare @dumpdevicename varchar(200)
declare @dumpdevicepath varchar(200)
declare db_sysnames cursor for
select name from master.dbo.sysdatabases
where has_dbaccess(name) = 1 -- Only look at databases to which we have access
open db_sysnames
fetch db_sysnames into @name
while @@fetch_status >= 0
begin
SET @dumpdevicename = @name + '_Backup'
IF left(upper(@name),4) = 'FOO_'
BEGIN
SET @dumpdevicepath = 'D:\Backup\Slask_20080229\'+@name+'_Backup.dat'
EXEC sp_addumpdevice 'disk', @dumpdevicename,
@dumpdevicepath
BACKUP DATABASE @name TO @dumpdevicename
--HÄR VILL JAG HA IN UPDATESKRIPTET NEDAN
END
fetch db_sysnames into @name
end
deallocate db_sysnames
GO
Detta funkar utan problem men säg om jag skulle vilja byta alla A mot B i en tabell efter backupen i samtliga databaser?
Typ:
--Detta funkar ju inte efter som tabellen foo inte finns i den databas jag står i (Master)
UPDATE foo SET bar = replace(bar), 'A','B')
--Detta funkar heller inte, (@name innehåller namnet på databasen jag precis gjort backup på)
UPDATE @name.dbo.foo SET bar = replace(bar), 'A','B')
--Detta funkar heller inte
USE @name
UPDATE foo SET bar = replace(bar), 'A','B')
Är detta en omöjlighet? Det borde det ju inte vara, kan jag backa en databas så borde jag väl kunna göra vad jag vill med den?
Tack på förhand
Andreas
Sv: Byta databas inne i cursor?
<databasnamn>.<Ägare>.<Tabell>
Exempel: Mydatabase.dbo.Customers
Du skulle ju kunna bygga upp en sträng utifrån namnet som du fångat i @name-parametern och sedan använda ExecuteSQL på denna. ExecuteSQL exekverar SQL-strängar.Sv:Byta databas inne i cursor?
<code>
UPDATE servername.@name.dbo.foo SET bar = replace(bar), 'A','B')
</code>