คำตอบยอดนิยมโดยทั่วไปจะดีที่สุด แต่ไม่สามารถใช้ได้กับฟังก์ชั่นที่มีค่าในตาราง
MikeTeeVee ให้วิธีแก้ปัญหานี้ในความคิดเห็นของเขาในคำตอบยอดนิยม แต่มันจำเป็นต้องใช้ฟังก์ชั่นรวมเช่น MAX ซึ่งไม่ได้ทำงานได้ดีสำหรับสถานการณ์ของฉัน
ฉันยุ่งกับโซลูชันอื่นสำหรับกรณีที่คุณต้องการตารางแบบอินไลน์ที่มีมูลค่า udf ที่ให้ผลตอบแทนเช่นselect *แทนที่จะเป็นผลรวม โค้ดตัวอย่างที่แก้ปัญหากรณีนี้อยู่ด้านล่าง อย่างที่ใครบางคนชี้ไปแล้ว ... "JEEZ wotta hack" :) ฉันยินดีต้อนรับทางออกที่ดีกว่าสำหรับคดีนี้!
create table foo (
ID nvarchar(255),
Data nvarchar(255)
)
go
insert into foo (ID, Data) values ('Green Eggs', 'Ham')
go
create function dbo.GetFoo(@aID nvarchar(255)) returns table as return (
select *, 0 as CausesError from foo where ID = @aID
--error checking code is embedded within this union
--when the ID exists, this second selection is empty due to where clause at end
--when ID doesn't exist, invalid cast with case statement conditionally causes an error
--case statement is very hack-y, but this was the only way I could get the code to compile
--for an inline TVF
--simpler approaches were caught at compile time by SQL Server
union
select top 1 *, case
when ((select top 1 ID from foo where ID = @aID) = @aID) then 0
else 'Error in GetFoo() - ID "' + IsNull(@aID, 'null') + '" does not exist'
end
from foo where (not exists (select ID from foo where ID = @aID))
)
go
--this does not cause an error
select * from dbo.GetFoo('Green Eggs')
go
--this does cause an error
select * from dbo.GetFoo('Yellow Eggs')
go
drop function dbo.GetFoo
go
drop table foo
go