我有这个表值的函数,它根据分隔符分割字符串来创建表。Sqlserver 2014:无法在动态查询中使用表值函数
USE [sysmon]
GO
/****** Object: UserDefinedFunction [dbo].[ParseString3] Script Date: 12/28/2016 3:49:06 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER FUNCTION [dbo].[ParseString3] (@String VARCHAR(MAX), @Delimiter VARCHAR(10))
RETURNS TABLE
AS
RETURN (
SELECT Ident, StringValue FROM
(
SELECT Num as Ident,
CASE
WHEN DATALENGTH(@delimiter) = 0 or @delimiter IS NULL
THEN SUBSTRING(@string, num, 1)
ELSE
LTRIM(RTRIM(SUBSTRING(@String,
CASE
WHEN (Num = 1 AND SUBSTRING(@String,num ,DATALENGTH(@delimiter)) <> @delimiter) THEN 1
ELSE Num + DATALENGTH(@delimiter)
END,
CASE CHARINDEX(@Delimiter, @String, Num + DATALENGTH(@delimiter))
WHEN 0 THEN LEN(@String) - Num + DATALENGTH(@delimiter)
ELSE CHARINDEX(@Delimiter, @String, Num + DATALENGTH(@delimiter)) - Num -
CASE
WHEN Num > 1 OR (Num = 1 AND SUBSTRING(@String,num ,DATALENGTH(@delimiter)) = @delimiter)
THEN DATALENGTH(@delimiter)
ELSE 0
END
END
)))
End AS StringValue
FROM sysmon.dbo.Numbers
WHERE Num <= LEN(@String)
AND (
SUBSTRING(@String, Num, DATALENGTH(ISNULL(@delimiter,''))) = @Delimiter
OR Num = 1
OR DATALENGTH(ISNULL(@delimiter,'')) = 0
)
) R WHERE DATALENGTH(StringValue) <> 0
)
现在我创建下面的动态查询
declare @abc nvarchar(500)
set @abc = 'select distinct stringvalue, ' + [sysmon].[dbo].[feedmapping]('sungard') +
'from ' + [sysmon].[dbo].[parseString3]('599362,16570,568838',',') +
' inner join dbname.dbo.tablename
on stringvalue = tablecolumn'
exec sp_executesql @abc
其中feedmapping是另一个标量值的功能
USE [sysmon]
GO
/****** Object: UserDefinedFunction [dbo].[FeedMapping] Script Date: 12/28/2016 4:07:59 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[FeedMapping](@feedName Varchar(20))
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @ret VARCHAR(20)
IF (@feedname = 'SunGard')
set @ret = 'SungardSymbol'
ELSE IF (@feedname = 'xxxx')
set @ret = 'yyyyyyy'
ELSE IF (@feedname = 'aaaaa')
set @ret = 'ccccccc'
return @ret
END
在运行它给我下面的错误
无法找到列“sysmon”或用户d已定义函数或 聚合“sysmon.dbo.parseString3”,或名称不明确。
请帮
为什么PLSQL标签? – jarlh
你能打印@abc吗?并粘贴在这里? –
@ user2611539查询中的动态值是什么? –