शीर्ष उत्तर आम तौर पर सबसे अच्छा होता है, लेकिन इनलाइन टेबल वैल्यू फ़ंक्शंस के लिए काम नहीं करता है।
माइकटेवी ने शीर्ष उत्तर पर अपनी टिप्पणी में इसके लिए एक समाधान दिया, लेकिन इसके लिए मैक्स जैसे कुल कार्य का उपयोग आवश्यक था, जो मेरी परिस्थिति के लिए अच्छा नहीं था।
मैंने उस मामले के लिए एक वैकल्पिक समाधान के साथ गड़बड़ कर दी, जहां आपको एक इनलाइन टेबल मूल्यवान udf की आवश्यकता होती है, जो एक समुच्चय के बजाय कुछ चुनिंदा * की तरह लौटाता है । इस विशेष मामले को हल करने वाला नमूना कोड नीचे है। जैसा कि किसी ने पहले ही बताया है ... "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