เรากำลังอยู่ในขั้นตอนการแทนที่ SQL Server ของเราและได้ตัดสินใจว่าการเปลี่ยนชื่อเซิร์ฟเวอร์นั้นจะง่ายกว่าการเปลี่ยนทุกอย่างให้ชี้ไปที่ชื่อใหม่ เราพบคำแนะนำในการเปลี่ยนชื่ออินสแตนซ์ SQL Server ให้ตรงกับชื่อคอมพิวเตอร์ที่มีลักษณะดังนี้:
sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local
แม้ว่า SQL Enterprise Manager จะดูเหมือนจะไม่ชอบสิ่งเหล่านี้ด้วยกัน ฉันต้องเปลี่ยนเป็นสิ่งต่อไปนี้เพื่อให้ทำงานร่วมกันได้:
sp_dropserver 'OLDSERVER'; GO
sp_addserver 'NEWSERVER', 'local'; GO
ซึ่งไม่เลว แต่ฉันอยากให้สิ่งต่าง ๆ เป็นอัตโนมัติมากขึ้น เนื่องจาก @@ ServerName ส่งคืนชื่ออินสแตนซ์ฉันจึงหาวิธีทำให้บรรทัดแรกเป็นอัตโนมัติ:
sp_dropserver @@ServerName; GO
ฉันยังได้เรียนรู้ว่า SERVERPROPERTY ('ServerName') ควรจะส่งคืนชื่อคอมพิวเตอร์ดังนั้นฉันคิดว่าฉันอาจใช้มันเพื่อทำให้ส่วนที่สองเป็นแบบอัตโนมัติได้ แต่สิ่งนี้ไม่ทำงาน:
sp_addserver SERVERPROPERTY('ServerName'), 'local'; GO
ฉันพยายามตั้งค่าตัวแปรซึ่งฉันต้องทำเพื่ออัปเดตงาน SQL Agent แต่ก็ไม่ได้ผล:
DECLARE @srv sysname;
SET @srv = CAST(SERVERPROPERTY('ServerName') AS sysname);
sp_addserver @srv, 'local'; GO
ไวยากรณ์ไม่ถูกต้องใกล้กับ 'sp_addserver'
ฉันอยากจะไม่ต้อง hardcode ชื่อเซิร์ฟเวอร์ใหม่ลงในสคริปต์เพื่อให้สามารถใช้ซ้ำได้ง่ายขึ้น ใครมีความคิดเห็นบ้าง