ใส่สคริปต์ทั้งหมดลงในสตริงเทมเพลตโดยมีตัวยึดตำแหน่ง {SERVERNAME} จากนั้นแก้ไขสตริงโดยใช้:
SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)
จากนั้นเรียกใช้ด้วย
EXECUTE (@SQL_SCRIPT)
ยากที่จะเชื่อว่าตลอดสามปีที่ผ่านมาไม่มีใครสังเกตเห็นว่ารหัสของฉันใช้ไม่ได้ !
คุณไม่สามารถEXECหลายแบทช์ GOเป็นตัวคั่นชุดงานไม่ใช่คำสั่ง T-SQL จำเป็นต้องสร้างสตริงที่แยกจากกันสามสตริงจากนั้นให้EXECแต่ละสตริงหลังจากการแทนที่
ฉันคิดว่าคน ๆ หนึ่งสามารถทำบางสิ่งที่ "ฉลาด" ได้โดยการแยกสตริงเทมเพลตเดียวออกเป็นหลายแถวโดยการแยกGO; ฉันทำเสร็จแล้วในรหัส ADO.NET
แล้วฉันได้คำว่า "SERVERNAME" มาจากไหน?
นี่คือรหัสบางส่วนที่ฉันเพิ่งทดสอบ (และใช้งานได้):
DECLARE @DBNAME VARCHAR(255)
SET @DBNAME = 'TestDB'
DECLARE @CREATE_TEMPLATE VARCHAR(MAX)
DECLARE @COMPAT_TEMPLATE VARCHAR(MAX)
DECLARE @RECOVERY_TEMPLATE VARCHAR(MAX)
SET @CREATE_TEMPLATE = 'CREATE DATABASE {DBNAME}'
SET @COMPAT_TEMPLATE='ALTER DATABASE {DBNAME} SET COMPATIBILITY_LEVEL = 90'
SET @RECOVERY_TEMPLATE='ALTER DATABASE {DBNAME} SET RECOVERY SIMPLE'
DECLARE @SQL_SCRIPT VARCHAR(MAX)
SET @SQL_SCRIPT = REPLACE(@CREATE_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)
SET @SQL_SCRIPT = REPLACE(@COMPAT_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)
SET @SQL_SCRIPT = REPLACE(@RECOVERY_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)