日期:2014-05-18  浏览次数:20749 次

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 函数可以解决。。。