加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 在函数内执行WITH语句

发布时间:2020-12-12 08:56:28 所属栏目:MsSql教程 来源:网络整理
导读:我有以下代码: WITH OrderedOrders AS(SELECT *,ROW_NUMBER() OVER (ORDER BY item) AS RowNumber from dbo.fnSplit('1:2:3:5',':') ) select * from OrderedOrders where rownumber =2 我需要在函数内运行此代码,但是我无法使语法正确.现在的情况如下: CRE
我有以下代码:
WITH OrderedOrders AS
(

SELECT *,ROW_NUMBER() OVER (ORDER BY item) AS RowNumber
 from  dbo.fnSplit('1:2:3:5',':')  
)

 select * from OrderedOrders where rownumber =2

我需要在函数内运行此代码,但是我无法使语法正确.现在的情况如下:

CREATE FUNCTION [dbo].[FN_INDICE_SPLIT]
    (@sInputList VARCHAR(8000),@sDelimiter VARCHAR(8000),@INDICE INT)

RETURN TABLE 


;WITH OrderedOrders AS
( 
SELECT *,ROW_NUMBER() OVER (ORDER BY item) AS RowNumber
 from  dbo.fnSplit(@sDelimiter,@INDICE)  
)
select ITEM from OrderedOrders where RowNumber=@INDICE

如果我尝试执行此操作,它会给我这个错误:

Msg 156,Level 15,State 1,Procedure FN_INDICE_SPLIT,Line 4
Incorrect syntax near the keyword 'RETURN'.

我试图在很多方面做到这一点,但我不断得到语法错误,我不知道出了什么问题.

解决方法

在TABLE-VALUED FUNCTION中,您不需要在WITH之前使用分号.特别是考虑到你甚至无法在TVF中使用多语句,因此没有理由存在语句分隔符.

正确的形式是CREATE FUNCTION(…)RETURNS TABLE AS RETURN< statement>

CREATE FUNCTION [dbo].[FN_INDICE_SPLIT]
    (@sInputList VARCHAR(8000),@INDICE INT)
RETURNS TABLE 
AS RETURN
WITH OrderedOrders AS
( 
SELECT *,@INDICE)  
)
select ITEM from OrderedOrders where RowNumber=@INDICE
GO

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读