শীর্ষের উত্তরটি সাধারণত সেরা, তবে ইনলাইন টেবিলের মূল্যবান ফাংশনের জন্য কাজ করে না।
মাইকটিভি শীর্ষ উত্তরের মন্তব্যে এর জন্য একটি সমাধান দিয়েছেন, তবে এটির জন্য ম্যাক্সের মতো একটি সামগ্রিক ফাংশন ব্যবহার করা দরকার যা আমার পরিস্থিতিতে ভালভাবে কাজ করে নি।
আমি মামলার বিকল্প বিকল্পটি দিয়ে গোল করলাম যেখানে আপনার একটি ইনলাইন টেবিলের মূল্যবান ইউডিএফ দরকার যা একটি সামগ্রীর পরিবর্তে সিলেক্ট * এর মতো কিছু ফেরত দেয় । এই নির্দিষ্ট ক্ষেত্রে সমাধানের নমুনা কোড নীচে is যেহেতু কেউ ইতিমধ্যে চিহ্নিত করেছে ... "জিজি ওয়াটা হ্যাক" :) আমি এই মামলার আরও ভাল সমাধানকে স্বাগত জানাই!
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