我想创建一个函数,为任何给定的表返回逗号分隔的字段名称列表。该函数应接受数据库,模式和表名作为输入,以返回逗号分隔列表。
我可以在存储过程中执行此操作,但我想在函数中执行此操作,以便将其加入数据集中。但是我在动作中不允许使用动态sql的问题 - 所以我该怎么办呢?
这是我想在函数中复制的proc
alter proc dbo.usp_generate_column_name_string
@database varchar(100),@schema varchar(100), @table varchar(100)
as
declare @str varchar(max) = '
select stuff((select '','' + name as [text()] from
(
select c.name from ' + @database + '.sys.tables a
inner join ' + @database + '.sys.schemas b on a.schema_id = a.schema_id
inner join ' + @database + '.sys.columns c on c.object_id= a.object_id
where b.name = '''+@schema+''' and a.name ='''+@table+''') x
for xml path ('''')),1,1,'''')
'
exec (@str)
go
exec dbo.usp_generate_column_name_string 'test' , 'dbo','jl1_tmp'
答案 0 :(得分:0)
有很多方法可以做到这一点,一种更简单的方法是将proc结果插入临时表并在连接中使用它
create table #coltemp(colList varchar(max))
insert into #coltemp
exec dbo.usp_generate_column_name_string 'test' , 'dbo','jl1_tmp'
select * from #coltemp
检查以下问题,了解将proc结果插入临时表Insert results of a stored procedure into a temporary table
的差异方法答案 1 :(得分:0)
这是基本的想法:
+8.5 GMT
注意: