我想创建一个tsql函数,它将返回一个表作为执行tsql查询的结果。但我总是得到错误。只是想知道下面的代码有什么问题。我创造了分裂给出postcodeidsTSQL函数头疼
ALTER FUNCTION [dbo].[fnGetPostcodeBrowseByIds]
(
@PostCodes varchar(1000),
@SortBy int
)
RETURNS @result TABLE
(
postcode int,
suburb varchar(100),
[state] varchar(3)
)
AS
BEGIN
declare @tmp table
(
postcode int,
suburb varchar(100),
[state] varchar(3)
)
declare @query varchar(1000)
if @SortBy = 0
begin
set @query = N' select a.postcodeid as postcode,b.name as
suburb,a.state from postcode a inner join suburb b on
a.postcodeid = b.postcodeid where a.postcodeid
in (select data from
dbo.fnSplit(''' + @PostCodes + ''','','')) order by a.postcodeid asc'
end
else
begin
set @query = N' select a.postcodeid as postcode,b.name as
suburb,a.state from postcode a inner join suburb b on
a.postcodeid = b.postcodeid where a.postcodeid
in (select data from
dbo.fnSplit(''' + @PostCodes + ''','','')) order by b.Name asc'
end
insert into @result execute (@query)
return
END
等功能
ALTER FUNCTION [dbo].[fnSplit]
(
@String NVARCHAR(4000),
@Delimiter NCHAR(1)
)
RETURNS TABLE
AS
RETURN
(
WITH Split(stpos,endpos)
AS(
SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos
UNION ALL
SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1)
FROM Split
WHERE endpos > 0
)
SELECT 'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)),
'Data' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos)
FROM Split
)
fnSplit
作品找到,但第一个函数没有。
此函数用于根据给定的邮政编码返回邮政编码,郊区名称和州的列表,这是一个分隔字符串。例如:2001,2200,3400等。并应能根据邮政编码本身或郊区名称进行排序。
任何帮助将不胜感激。
欢呼声
是什么问题? –
我们不知道这个功能是做什么的。也许编辑你的“问题”,并添加一些解释,以及一个实际的问题... –