ใช้ SQL Server 2008 R2 Enterprise Edition
พิจารณาข้อความต่อไปนี้:
:setvar source_server_name "SERVERNAME\INSTANCENAME"
เป็นไปได้ในโหมด SQLCMD เพื่อรับค่านั้นโดยใช้ TSQL
สิ่งที่ต้องการ: :setvar source_server_name = SELECT @@servername
ขอขอบคุณ
อัพเดทเมื่อ 7/15/2013
คำตอบสองข้อเสนอด้านล่างไม่ได้ให้ผลลัพธ์ที่ต้องการดังนั้นฉันจึงเพิ่มตัวอย่างที่เกี่ยวข้อง
:setvar source_server_name [myserver]
ตัวแปร source_server_name ถูกตั้งค่าเป็นสตริงข้อความ [myserver_1]
ฉันต้องการทำสิ่งนี้:
create table #tmp(
id int identity(1,1),
server sysname
)
insert into #tmp values('myserver_1'),('myserver_2');
:setvar source_server_name = SELECT server FROM #tmp WHERE id = 1
select '$(source_server_name)'
(No column name)
myserver_1
ตัวแปร source_server_name จะถูกกำหนดเป็นค่าในเซิร์ฟเวอร์สำหรับ id 1
ไม่ใช่ว่าฉันรู้หรือคิดออก
สิ่งที่คุณขอเป็นไปไม่ได้สำหรับแต่ละโปรแกรมเนื่องจากตัวแปร sqlcmd ถูกประเมินโดยไคลเอนต์ก่อนที่ sql จะถูกส่งไปยังเซิร์ฟเวอร์ ดังนั้นคุณจะขอให้เซิร์ฟเวอร์ sql ตั้งค่าของตัวแปรที่มันไม่เคยเห็น เรียกใช้การติดตาม profiler sql ในสคริปต์ sql พร้อมตัวแปร sqlcmd และคุณจะเห็นว่าพวกเขาได้รับการประเมินทั้งหมดแล้ว
—
ทิม Abell