SQL Server: Using Parameterized Functions
A Transact SQL Forum topic we see is Problems using functions in SQL server:
How to execute dynamic sql from function
Actually, SQL server has limitations in functions. One of the limitations of custom functions is parameters can not be transferred to name of the table function.
For example, we have 20 tables that we need to work 20 functions. For this problem we thought about " xp_exec".
For example, first created a table and dynamically selected columns from this table:
use tempdb
go
create table test
(t1 int)
go
insert test values(1)
insert test values(2)
insert test values(2)
insert test values(3)
insert test values(3)
insert test values(4)
insert test values(5)
insert test values(8)
go
And then we will create a function for given results dynamically:
drop function showfunction
go
create function dbo.showfunction(@tablename sysname,@colname sysname)
returns @showtable table (showresult sql_variant)
as
begin
declare @stringsql varchar(8000)
set @stringsql='
Create Function dbo.showprim()
Returns @showtab Table(showres sql_variant)
as
begin
insert @showtab
Select showres=AVG(t1) from (
select min(t1) as t1 from (
select top 50 percent '+@colname+' as t1 from '+@tablename+' order by t1 desc
)t
union all
select max(t1) from (
select top 50 percent '+@colname+' as t1 from '+@tablename+' order by t1
)t
)M
Return
end
'
exec master..xp_exec 'Drop Function Dbo.showprim','N','tempdb'
exec master..xp_exec @stringsql,'N','tempdb'
Insert @showtable Select*from showprim()
return
end
go
select* from showfunction('test','t1')
go
drop table test
showresult
----------------
3
Results was successful.