Kinda sorta, theo một cách nào đó. Chỉ không trực tiếp.
Giá trị mà bạn đặt một biến thành thông qua :setvar
là một giá trị đơn giản, theo nghĩa đen. Bạn có thể thấy điều này bằng cách chỉ chạy hai dòng sau:
:setvar var1 $(var2)
PRINT '$(var1)';
Trả về:
$(var2)
Nếu chế độ SQLCMD / SQLCMD cố phân tích phần giá trị :setvar
theo bất kỳ cách nào, thì nó sẽ bị lỗi khi $(var2)
không được xác định.
Thay thế biến được phép trong một số lệnh SQLCMD khác.
Điều này có nghĩa là, ví dụ, bạn có thể thực thi lệnh shell trong khi truyền biến SQLCMD cho dòng lệnh đó:
:setvar db_suffix some_suffix
!! echo :setvar other_db [MyDB_$(db_suffix)] > c:\TEMP\setvar.txt
Hai dòng trên sẽ tạo / ghi đè lên một tệp, C: \ TEMP \ setvar.txt , với văn bản là ": setvar other_db [MyDB _ $ (db_suffix)]" nơi $(db_suffix)
được thay thế bằng giá trị của nó là "some_suffix".
Các lệnh SQLCMD trong tệp / tập lệnh được nhập thông qua :r
lệnh được xử lý trong lần truyền thứ hai, cho phép các biến được đặt trong các tệp bên ngoài được phản ánh trong tập lệnh chính:
:setvar db_suffix some_suffix
!! echo :setvar other_db [MyDB_$(db_suffix)] > c:\TEMP\setvar.txt
:r C:\TEMP\setvar.txt
PRINT 'somethin_somethin: $(other_db)';
Trả về:
somethin_somethin: [MyDB_some_suffix]
Các lệnh SQLCMD được diễn giải theo từng đợt !! Vì vậy, nếu bạn muốn thay đổi giá trị được nối, thì bạn cần tách riêng việc tạo và đọc tệp tạm thời, nếu không, giá trị bạn nhận được sẽ là giá trị cuối cùng được đặt vì tất cả các lệnh !!
và :r
sẽ được xử lý trước các giá trị biến được thay thế và sau đó lô có thể được gửi tới SQL Server để xử lý T-SQL. Ví dụ:
:setvar db_suffix some_suffixes
!! echo :setvar other_db [MyDB_$(db_suffix)] > c:\TEMP\setvar.txt
:r C:\TEMP\setvar.txt
PRINT 'somethin_somethin: $(other_db)';
--GO
!! echo :setvar other_db [NotMyDB_$(db_suffix)22] > c:\TEMP\setvar.txt
:r C:\TEMP\setvar.txt
PRINT 'somethin_somethin2: $(other_db)'
Sẽ trở lại:
somethin_somethin: [NotMyDB_some_suffixes22]
somethin_somethin2: [NotMyDB_some_suffixes22]
NHƯNG, bỏ ghi chú --GO
và bạn sẽ nhận được những điều sau đây:
somethin_somethin: [MyDB_some_suffixes]
somethin_somethin2: [NotMyDB_some_suffixes22]