2013-10-24 15 views
36

Tôi đã tạo một hàm trả về có giá trị bảng trả về cho tôi một bảng. đây là tiếng gọi của chức năng của tôi như sautham số truyền trong hàm giá trị bảng bằng cách sử dụng câu lệnh chọn

SELECT * FROM dbo.[StateFixedTaxesCalculation](3020,16,1,1006) 

và nó làm việc OK cho tôi, bây giờ tôi muốn sử dụng cuộc gọi chức năng này trong một Statment chọn, vì vậy tôi có thể vượt qua 16 mà về cơ bản là employeeId động.

Vì vậy, tôi đã quyết định sử dụng kết nối bên trong với bảng được trả về bởi hàm đó. Như thế này

SELECT * FROM Employee as E 
INNER JOIN dbo.[StateFixedTaxesCalculation](3020,16,1,1006) as TC ON TC.EmployeeId=E.EmployeeId 

nhưng bây giờ làm thế nào tôi có thể vượt qua 16 giá trị như năng động của tất cả các employeeId từng cái một.

Trả lời

56

sử dụng outer/cross apply:

select * 
from Employee as E 
    cross apply dbo.[StateFixedTaxesCalculation](3020, E.EmployeeId, 1, 1006) as TC 

nếu bạn vẫn phải lọc theo TC.EmployeeId = E.EmployeeId, bạn có thể làm điều này với subquery:

select * 
from Employee as E 
    cross apply (
     select TT.* 
     from dbo.[StateFixedTaxesCalculation](3020, E.EmployeeId, 1, 1006) as TT 
     where TT.EmployeeId = E.EmployeeId 
    ) as TC 
+0

Cảm ơn tác phẩm của mình cho tôi. Tôi có một vài khó khăn hơn nhưng tôi đăng chúng như một câu hỏi riêng biệt. – rahularyansharma

+3

Sau khi tìm kiếm giờ (chủ yếu là từ khóa sai có thể), tôi đã đến câu hỏi này. Nó đã cứu ngày của tôi. Cảm ơn –

+0

Công việc tuyệt vời trên này, tôi không nhận được để sử dụng qua áp dụng quá thường xuyên, vì vậy tôi luôn luôn phải đi tìm nó :) – jediCouncilor

Các vấn đề liên quan