मैं ले जाने के/डीबीएस कई बार नाम बदलने के लिए किया है। यदि आप एक ही नाव में हैं, तो यहां एक ऐसी स्क्रिप्ट है जो नए/पुराने नामों को ऊपर और ऊपर टाइप करने से बचने के लिए चर का उपयोग करती है।
हालांकि, एसएसएमएस में तार्किक नाम को प्रतिबिंबित करने के लिए, आपको अभी भी right click -> rename
की आवश्यकता है। यह नीचे EXECUTE
/REPLACE
विधि का उपयोग किए बिना समान प्रतीत होता है।
---------- CHANGE THESE ----------
-- Keep names identical to only move locations
DECLARE @CurrDbName AS varchar(255) = 'CurrentDbName'
DECLARE @NewDbName AS varchar(255) = 'NewDbName'
DECLARE @PathToFolder AS varchar(255) = '<FullPathMinusFilename>\'
---------- DECLARE TEMPLATES ----------
-- Use DB
DECLARE @USE_DB AS varchar(255) = 'USE [{CurrDbName}]'
-- Change physical file names
DECLARE @SET_PHYS_MDF AS varchar(255) = 'ALTER DATABASE [{CurrDbName}] MODIFY FILE (NAME = ''{CurrDbName}'', FILENAME = ''{PathToFolder}{NewDbName}.mdf'')'
DECLARE @SET_PHYS_LDF AS varchar(255) = 'ALTER DATABASE [{CurrDbName}] MODIFY FILE (NAME = ''{CurrDbName}_log'', FILENAME = ''{PathToFolder}{NewDbName}_log.ldf'')'
-- Change logical names (LOG = "logical", not "log")
If (@CurrDbName != @NewDbName)
BEGIN
DECLARE @SET_LOG_MDF AS varchar(255) = 'ALTER DATABASE [{CurrDbName}] MODIFY FILE (NAME = ''{CurrDbName}'', NEWNAME = ''{NewDbName}'')'
DECLARE @SET_LOG_LDF AS varchar(255) = 'ALTER DATABASE [{CurrDbName}] MODIFY FILE (NAME = ''{CurrDbName}_log'', NEWNAME = ''{NewDbName}_log'')'
END
-- Take offline
DECLARE @SET_OFFLINE AS varchar(255) = 'ALTER DATABASE [{CurrDbName}] SET OFFLINE WITH ROLLBACK IMMEDIATE'
---------- START DOING STUFF ----------
DECLARE @SQL_SCRIPT AS varchar(255)
-- Use DB
SET @SQL_SCRIPT = REPLACE(@USE_DB, '{CurrDbName}', @CurrDbName)
EXECUTE (@SQL_SCRIPT)
-- Change physical file names
SET @SQL_SCRIPT = REPLACE(REPLACE(REPLACE(@SET_PHYS_MDF, '{CurrDbName}', @CurrDbName), '{NewDbName}', @NewDbName), '{PathToFolder}', @PathToFolder)
EXECUTE (@SQL_SCRIPT)
SET @SQL_SCRIPT = REPLACE(REPLACE(REPLACE(@SET_PHYS_LDF, '{CurrDbName}', @CurrDbName), '{NewDbName}', @NewDbName), '{PathToFolder}', @PathToFolder)
EXECUTE (@SQL_SCRIPT)
-- Change logical names (LOG = "logical", not "log")
If (@CurrDbName != @NewDbName)
BEGIN
SET @SQL_SCRIPT = REPLACE(REPLACE(@SET_LOG_MDF, '{CurrDbName}', @CurrDbName), '{NewDbName}', @NewDbName)
EXECUTE (@SQL_SCRIPT)
SET @SQL_SCRIPT = REPLACE(REPLACE(@SET_LOG_LDF, '{CurrDbName}', @CurrDbName), '{NewDbName}', @NewDbName)
EXECUTE (@SQL_SCRIPT)
END
-- Take offline
USE [master]
SET @SQL_SCRIPT = REPLACE(@SET_OFFLINE, '{CurrDbName}', @CurrDbName)
EXECUTE (@SQL_SCRIPT)
-- Now turn off the database, rename/move physical files, and bring the database back online
अगर यह पर्याप्त नहीं है यह मेरा पहला जवाब है, क्षमा याचना है। इन उत्तरों की
एक अलग निर्देशिका के लिए एलडीएफ फ़ाइल ले और उसके बाद करने के लिए प्रयास करें केवल MDF फ़ाइल लिंक, या दोनों फ़ाइलों – iceDragon
संलग्न करने के लिए @iceDragon कोई किस्मत, मैं .ldf फ़ाइल संलग्न नहीं कर सकते न अलग निर्देशिका के लिए बदल रहा में मदद करता है की कोशिश करो। –
क्या आपने व्यवस्थापक अधिकारों के साथ एसक्यूएल प्रबंधन शुरू करने की कोशिश की है? – iceDragon