การตั้งค่าตัวแปรในโหมด SQLCMD


13

ใช้ 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


ไม่ใช่ว่าฉันรู้หรือคิดออก

1
สิ่งที่คุณขอเป็นไปไม่ได้สำหรับแต่ละโปรแกรมเนื่องจากตัวแปร sqlcmd ถูกประเมินโดยไคลเอนต์ก่อนที่ sql จะถูกส่งไปยังเซิร์ฟเวอร์ ดังนั้นคุณจะขอให้เซิร์ฟเวอร์ sql ตั้งค่าของตัวแปรที่มันไม่เคยเห็น เรียกใช้การติดตาม profiler sql ในสคริปต์ sql พร้อมตัวแปร sqlcmd และคุณจะเห็นว่าพวกเขาได้รับการประเมินทั้งหมดแล้ว
ทิม Abell

คำตอบ:


9

ฉันคิดว่าคุณต้องส่งผลลัพธ์ของคุณไปยังไฟล์และนำพวกเขากลับมาสิ่งนี้จะช่วยให้คุณเข้าใกล้สิ่งที่คุณกำลังมองหา:

:setvar MyDir "C:\scripts"
:OUT $(MyDir)\test.txt
PRINT ':SETVAR ServerName ''' + @@SERVERNAME + ''''
GO
:OUT stdout
:r $(MyDir)\test.txt
GO
SELECT $(ServerName)

คุณสามารถดูตัวอย่างเพิ่มเติมได้ที่นี่


ขอขอบคุณ. ฉันออกจากงานไปแล้วดังนั้นฉันจะลองทำตามคำแนะนำของคุณในวันจันทร์
Craig Efrein

ฉันได้อัปเดตคำถามของฉันแล้ว
Craig Efrein

คำตอบนี้พิสูจน์แล้วว่ามีประโยชน์มากที่สุด
Craig Efrein

1
ฉันเดาว่าส่วนที่สำคัญที่นี่คือคุณต้องมีแบตช์แยกเป็น 1) สร้างไฟล์ SETVAR, 2) ดำเนินการเพื่อเริ่มต้นตัวแปรสคริปต์และสุดท้าย 3) ใช้ตัวแปรสคริปต์
Andriy M
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.