Fügt alle Datenbanken in einem Verzeichnis dem SQL Server hinzu.
Dies wird oftmals für schnelle Server Umzüge genutzt.
sp_configure 'adv',1
reconfigure
go
sp_configure 'xp_cmd',1
reconfigure
go
BEGIN
DECLARE @AttachFromDir nvarchar(500) = 'F:\Daten\SQL' --- <-- Attach Dir angeben
DECLARE @readDirCmd nvarchar(1000)
DECLARE @Aktuell nvarchar(160)
DECLARE @dbs nvarchar(256)
DECLARE @phys_name nvarchar(520)
DECLARE @dbccstmt nvarchar(1000)
DECLARE @dbsVersionAttach INT
DECLARE @VersionServer INT
DECLARE @TabFileNames TABLE (FileName nvarchar(260))
DECLARE @TabFileAttribiute TABLE (attrName sql_variant, attrValue sql_variant)
DECLARE cf CURSOR FOR SELECT FileName FROM @TabFileNames
SET NOCOUNT ON
SET @readDirCmd = 'dir /b "' + @AttachFromDir + '"\*.mdf'
INSERT into @TabFileNames
EXEC xp_cmdshell @readDirCmd
DELETE from @TabFileNames where FileName IS NULL or FileName = 'File Not Found'
DELETE FROM @TabFileNames
WHERE FileName IN (SELECT FileName FROM @TabFileNames a INNER JOIN sys.master_files b ON lower(@AttachFromDir + '\' + a.FileName) = lower(b.physical_name) )
IF not exists (SELECT TOP 1 * FROM @TabFileNames)
BEGIN
PRINT 'Keine Dateien gefunden. @AttachFromDir falsch???'
RETURN
END
SELECT @VersionServer = CONVERT (int,DATABASEPROPERTYEX('master', 'version'))
BEGIN TRY
OPEN cf
FETCH NEXT FROM cf INTO @Aktuell
WHILE @@FETCH_STATUS = 0
BEGIN
SET @phys_name = @AttachFromDir + '\' + @Aktuell
SET @dbccstmt = 'DBCC checkprimaryfile (' + '"' + @phys_name + '"' + ',2)'
INSERT INTO @TabFileAttribiute
EXEC (@dbccstmt)
SELECT @dbs = convert (nvarchar(256), attrValue)
FROM @TabFileAttribiute
WHERE attrName = 'Database name'
SELECT @dbsVersionAttach = convert (int, attrValue)
FROM @TabFileAttribiute
WHERE attrName = 'Database version'
IF (@dbsVersionAttach > @VersionServer)
OR
(exists (SELECT 1
FROM sys.databases d
WHERE RTRIM(LTRIM(lower(d.name))) = RTRIM(LTRIM(lower(@dbs)))))
BEGIN
PRINT ''
PRINT ' Attach ' + @dbs + ' abgebrochen! '
PRINT ' Eventuelle Probleme : '
PRINT '1. ' + @dbs + ' DBS Version is grösser als die Server Version.'
PRINT '2. ' + @dbs + ' DBS ist bereits am Server.'
PRINT ''
END
ELSE
BEGIN
EXEC sp_attach_single_file_db @dbname= @dbs , @physname = @phys_name
PRINT ''
PRINT 'Database "' + @dbs + '" attached Datei: ' + @Aktuell + '".'
PRINT ''
DELETE FROM @TabFileAttribiute
END
FETCH NEXT FROM cf INTO @Aktuell
END
CLOSE cf
DEALLOCATE cf
END TRY
BEGIN CATCH
PRINT 'Fehler bei Datei: ' + @phys_name + ''
CLOSE cf
DEALLOCATE cf
END CATCH
SET NOCOUNT OFF
END
GO
sp_configure 'xp_cmd',0
reconfigure
go
siehe auch Alle Datenbanken Detachen