tôi đã cố gắng gọi một in-line TVF với các thông số vị trí và nó hoạt động tốt:Gọi một TVF trực tuyến với các tham số có tên, cú pháp thích hợp là gì?
SELECT MyTable.Col1,
(SELECT TvfColumn FROM ufnGetData(MyTable.Col1, MyTable.Col2)),
MyTable.Col2
FROM MyTable
Sau đó, tôi đã cố gắng để đặt tên các tham số cho TVF và nó không phân tích:
SELECT MyTable.Col1,
(SELECT TvfColumn FROM ufnGetData(@Param1=MyTable.Col1, @Param2=MyTable.Col2)),
MyTable.Col2
FROM MyTable
Chức năng trông giống như sau:
CREATE FUNCTION dbo.ufnGetData
(
@Param1 INT,
@Param2 INT
)
RETURNS TABLE
AS
RETURN
(
SELECT
blah blah blah AS TvfColumn
)
GO
Đưa ra một lỗi tương tự như:
Msg 137, Level 15, State 2, Line 23 Phải khai báo biến vô hướng "@ Param2".
Msg 102, Level 15, State 1, Line 24 Cú pháp không chính xác gần ','.
Tôi đang làm gì sai?
Lợi ích thực sự là tôi có thể thay đổi thứ tự tham số trong TVF mà không ảnh hưởng đến người gọi. Nó cũng dễ dàng hơn để xem các tham số là gì, nếu chúng được đặt tên, mặc dù tôi có thể có được hiệu ứng tương tự với các bình luận nội tuyến được đặt tốt. –
@MichaelGoldshteyn Rất tiếc, không thể thực hiện với SQL Server. –
RE: "hoặc bất kỳ chức năng nào". Đây không phải là sự thật. Các UDF vô hướng có thể được gọi với 'EXEC' và chấp nhận các tham số có tên trong trường hợp đó. –