2009-04-29 33 views
7

Tôi đang xem nguồn của sys.sp_dbcmptlevel trong SQL Server 2005."%% DatabaseEx" làm gì trong TSQL?

Trong nguồn, có dòng này tôi không hiểu cách hoạt động của nó.

EXEC %%DatabaseEx(Name = @dbname).SetCompatibility(Level = @input_cmptlevel) 

Nó không xuất hiện là DatabaseEx là một thủ tục được lưu trữ.

-- does not return any result 
select * 
from sys.procedures 
where [name] like '%DatabaseEx%' 

Vì vậy, câu hỏi của tôi là

  • là gì DatabaseEx và nó làm gì?
  • %% trước DatabaseEx là gì?
+0

Google có thể vô ích khi tìm kiếm nội dung như "%%" ... arg. Có lẽ tôi cần thực hành nhiều hơn về googling ... – Sung

+0

Tôi vẫn không thể tìm thấy bất kỳ tài liệu nào về việc này ... – Sung

+3

Tìm kiếm mã Google cho phép các ký hiệu như %%, nhưng dường như có một khu vực tìm kiếm giới hạn hơn nhiều. Điều này dường như hoàn toàn không có giấy tờ trên MSDN. Tôi nhận được ấn tượng rằng TSQL được sử dụng trong System Stored Procedures không được phân tích chính xác giống như TSQL ở nơi khác. –

Trả lời

2
-- Note: database @dbname may not exist anymore 
-- Change compatibility level 
-- If invoke gets error, exception will abort this proc. 
EXEC %%DatabaseEx(Name = @dbname).SetCompatibility(Level = @input_cmptlevel) 

nó trông giống như một cách để đề cập đến một cơ sở dữ liệu biến như một đối tượng và làm cho cấu hình thay đổi

2

Thú vị find.

Hệ thống SP cũng tham chiếu đến %% Object, %% Relation, %% ColumnEx, %% LinkedServer, %% Owner, %% CurrentDatabase(), %% ErrorMessage, %% Module, %% DatabaseRef, %% LocalLogin , %% Bí danh, %% ServerConfiguration, %% IndexOrStats, %% ScalarType (v.v ..)

Giải thích của tôi là %%() truy xuất một số loại đối tượng (COM?) Dựa trên tiêu chí lọc, theo sau là một phương thức gọi điện.

+0

Tôi đã nghĩ rằng nó đang truy cập một sproc mở rộng nhưng tôi thậm chí còn chắc chắn về điều đó vào thời điểm này. – Sung

7

Tôi nghĩ câu trả lời hay nhất ở đây là nó không được ghi chép và không được hỗ trợ, do đó, đừng dựa vào nó. Mặc dù thật thú vị khi biết SQL Server hoạt động như thế nào trong nội bộ, mọi thứ bạn làm với kiến ​​thức đó đều có khả năng phá vỡ hotfix, gói dịch vụ hoặc bản phát hành trong tương lai.

+0

Bạn nói đúng về điều đó, Mike. Tôi chỉ muốn biết nó làm gì nhưng sẽ không sử dụng nó trong một kịch bản sản xuất. – Sung