2009-04-10 30 views
5
  1. Tôi có một TSQL Stored Procedure tsql__sp__A mà thực hiện hai điều:

(a) Tạo một bảng temp #tempTable có dữ liệu SELECT từ một truy vấn SELECT phức tạp.Truy cập TSQL đã tạo #temp bảng từ thủ tục lưu sẵn CLR. Có thể không?

(b) Gọi một thủ tục được lưu trữ CLR được lưu giữ clr__sp__B cho mỗi hàng tính toán các tham số hàng.

Câu hỏi: Có thể truy cập #tempTable từ thủ tục CLR clr__sp__B sử dụng bối cảnh kết nối giống nhau không? (Không, tôi không muốn di chuyển hoặc tạo khác #tempTable bên trong quy trình được quản lý)

Cảm ơn.

Trả lời

0

Chúng tôi có thể xác định hai loại bảng tạm thời trong SQL.

  • địa phương
  • toàn cầu

Về bảng tạm thời địa phương:

Khi bảng được trước bởi đăng nhập một lần '#', nó được định nghĩa là bảng tạm thời địa phương và phạm vi của nó là giới hạn trong phiên mà nó được tạo ra.

Và về các bảng tạm thời toàn cầu:

Ngược lại các bảng tạm thời địa phương, các bảng tạm thời toàn cầu có thể nhìn thấy trên toàn bộ ví dụ.

Vì vậy, bạn có thể thử sử dụng "##" để tạo bảng tạm thời toàn cầu. (Nếu có sự khác biệt giữa "ngữ cảnh kết nối" và "phiên")

+0

Cảm ơn bạn. Có, tôi có bảng tạm thời toàn cầu (##) như là một lựa chọn cuối cùng nhưng đã tự hỏi nếu có một cách để vượt qua bối cảnh phiên/kết nối hiện tại của TSQL để quản lý CLR? –

+0

Huh, câu hỏi hay. Nhưng whats về đảo ngược của các cuộc gọi? Tôi có nghĩa là bạn tạo ra một thủ tục được lưu trữ "wrapper" được lưu trữ, và thủ tục đó gọi tsql__sp__A và sau đó clr__sp__B. Hoặc, bạn viết lại clr__sp__B để gọi tsql__sp__A trước tiên. – boj

2

Cảm ơn bạn Boj.

Tuy nhiên tôi phát hiện ra rằng khi bạn sử dụng với một "kết nối context = true" nó mở ra tất cả các SET

Read Bol Article

// Kết nối bối cảnh cho phép bạn thực hiện câu lệnh SQL trong bối cảnh tương tự mà bạn mã được gọi tại địa điểm đầu tiên //

using (SqlConnection connection = new SqlConnection("context connection=true")) 
{ 
    connection.Open(); 
    // access #temp table 
} 
Các vấn đề liên quan