Đặt biến trong chế độ SQLCMD


13

Sử dụng SQL Server 2008 R2 Phiên bản doanh nghiệp

Hãy xem xét các tuyên bố sau:

:setvar source_server_name "SERVERNAME\INSTANCENAME"

Có thể trong chế độ SQLCMD để có được giá trị đó bằng TSQL

Cái gì đó như: :setvar source_server_name = SELECT @@servername

Cảm ơn bạn

Cập nhật ngày 15/7/2013

Hai câu trả lời được cung cấp dưới đây không hoàn toàn mang lại kết quả mong muốn, vì vậy tôi đang thêm một giải pháp phù hợp hơn.

:setvar source_server_name [myserver]

Biến source_server_name được đặt thành chuỗi văn bản [myserver_1]

Tôi muốn có thể làm điều này:

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

Biến source_server_name sẽ được đặt thành giá trị trong máy chủ cho id 1.


Không phải là tôi biết, hoặc có thể tìm ra.

1
Những gì bạn yêu cầu là không thể thực hiện được, bởi vì các biến sqlcmd được khách hàng đánh giá trước khi sql được gửi đến máy chủ. Vì vậy, bạn đang yêu cầu máy chủ sql đặt giá trị của một biến mà nó không bao giờ nhìn thấy. Chạy theo dõi hồ sơ sql trên tập lệnh sql với các biến sqlcmd và bạn sẽ thấy tất cả chúng đã được đánh giá.
Tim Abell

Câu trả lời:


9

Tôi nghĩ rằng bạn cần xuất kết quả của mình vào một tệp và đưa chúng trở lại. Một cái gì đó như thế này sẽ giúp bạn đến gần với những gì bạn đang tìm kiếm:

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

Bạn có thể xem thêm ví dụ ở đây .


Cảm ơn bạn. Tôi đã nghỉ việc nên tôi sẽ thử đề xuất của bạn vào Thứ Hai
Craig Efrein

Tôi đã cập nhật câu hỏi của mình
Craig Efrein

Câu trả lời này đã được chứng minh là hữu ích nhất.
Craig Efrein

1
Tôi đoán phần quan trọng ở đây là bạn phải có các lô riêng biệt để 1) tạo tệp SETVAR, 2) thực thi nó để khởi tạo biến tập lệnh và cuối cùng, 3) sử dụng biến tập lệnh.
Andriy M
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.