sqlserver调用自定义方法的问题
写了一个方法来拆分字符串,方法如下:
ALTER function [dbo].[StringSplit]
(
@SourceSql VARCHAR(8000) ,
@StrSeprate VARCHAR(10)
)
RETURNS @temp TABLE ( a INT )
--实现split功能 的函数,拆分为Int类型
AS
BEGIN
DECLARE @i INT
SET @SourceSql = RTRIM(LTRIM(@SourceSql))
SET @i = CHARINDEX(@StrSeprate, @SourceSql)
WHILE @i >= 1
BEGIN
INSERT @temp
VALUES ( RTRIM(LTRIM(LEFT(@SourceSql, @i - 1))) )
SET @SourceSql = SUBSTRING(@SourceSql, @i + 1,
LEN(@SourceSql) - @i)
SET @i = CHARINDEX(@StrSeprate, @SourceSql)
END
IF @SourceSql <> ''
INSERT @temp
VALUES ( LTRIM(@SourceSql) )
RETURN
END
然后用一个sql语句执行这个方法
SELECT * FROM dbo.StringSplit((SELECT fdaids FROM PointRegulationSet WHERE CommonName='1111221'),',')
其中 fdaids是'111,112,113'
报错:消息 102,级别 15,状态 1,第 1 行'(' 附近有语法错误。消息 102,级别 15,状态 1,第 1 行',' 附近有语法错误。
如果修改sql语句
SELECT * FROM dbo.StringSplit('111,112,113'
,',')
就执行成功。
单独执行SELECT fdaids FROM PointRegulationSet WHERE CommonName='1111221' 也是成功的,
问SELECT * FROM dbo.StringSplit((SELECT fdaids FROM PointRegulationSet WHERE CommonName='1111221'),',')
有什么问题!
谢谢
------解决方案--------------------SELECT * FROM dbo.StringSplit((SELECT fdaids FROM PointRegulationSet WHERE CommonName='1111221'),',')
語法錯誤,因為函數的變量@SourceSql 是一個VARCHAR類型,而不是一個記錄集類型。