sqlserver function不能执行sp_executesql
现在有个需求,查询一个结果集,其中有个子查询,会返回多条记录,需要把多条记录以“,”分隔显示在一条记录上。
大致思路如下
select a.column1,a.column2,(子查询的funciton) from table_1 a where a.column1=''
因为这类情况很多,function如果写死表名的话会需要写几十个几百个类似的函数,就想用动态sql拼接
但是执行的时候提示说function里不能使用sp_executesql
于是改成存储过程
但是存储过程怎样在查询语句中进行调用呢?
过程如下,执行结果也OK
ALTER PROCEDURE [dbo].[sp_as_unionCommon]
	-- Add the parameters for the stored procedure here
	@keyValue int,
	@relaTableName nvarchar(256),
	@relaColumn nvarchar(256),
	@relaColumnValue nvarchar(256),
	@getColumn nvarchar(256),
	@nameTableName nvarchar(256),
	@nameColumn  nvarchar(256),
	@nameRelColumn  nvarchar(256),
	@outStr nvarchar(max) output
AS
BEGIN
	-- Declare the return variable here
	DECLARE @SqlStr	nvarchar(MAX) = '',
			@str nvarchar(MAX) = ''
	if @keyValue=0
	begin
		select @sqlStr ='SELECT @str+='',''+cast (a.' + @getColumn + ' as nvarchar)  from ' + @relaTableName + ' a
		where a.' + @relaColumn + '=' +@relaColumnValue ;
	end
	else
	begin
		select @sqlStr ='SELECT @str+='',''+(select ' + @nameColumn +
											' from ' + @nameTableName +
											' where ' + @nameRelColumn + '=a.' + @getColumn +
											' )  from ' + @relaTableName + ' a
		where a.' + @relaColumn + '=' +@relaColumnValue ;
	end
	EXEC sp_executesql @sqlStr,N'@str nvarchar(max) output',@str=@str output;
	SET @outStr = stuff(@str,1,1,'')
END
------解决方案--------------------
也许clr 函数可以解决。。。