如何创建一个分割逗号分隔值的SQL函数? [英] How to create a SQL function which splits comma separated value?

查看:24
本文介绍了如何创建一个分割逗号分隔值的SQL函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在 SQL Server 中创建一个函数,它采用逗号分隔的字符串作为参数,将其拆分并一次返回一个值.这里的基本思想是从查询中调用该函数.像这样的东西.

I want to create a function in SQL Server which takes a comma separated string a parameter, splits it and returns one value at a time. The basic idea here is to call that function from a query. Something like this.

CREATE FUNCTION SPLIT_VALUE(@IN_CSV)
RETURN VARCHAR AS
 -- LOGIC TO RETURN A SINGLE VALUE FROM CSV
END

我想从存储过程调用这个函数.

I want to call this function from a stored procedure.

CREATE PROCEDURE DEMO_PROC @IN_CSV VARCHAR(5000), @OUT VARCHAR(5000) OUTPUT AS
   BEGIN
     SELECT @OUT= CONCAT(A.VALUE1,B.VALUE2) FROM TABLE1 A INNER JOIN TABLE2 B ON A.ID=B.ID WHERE A.ID 
     IN(--CALL THE FUNCTION AND GET ONE VALUE);
   END;

我每次都必须创建一个循环或游标来指向一个特定的值.这实际上可能吗?如果是,那我该怎么做?

I have to create a loop or cursor to point to a particular value every time. Is this practically possible to? If yes then how can I do that?

推荐答案

就像我提到的,你必须使用 CURSOR 来做到这一点,但是,事实上你想要做到这一点方式推断(大)设计缺陷:

Like I mention, you'll have to use a CURSOR to do this, however, the fact you want to do it this way infers a (large) design flaw:

DECLARE @value varchar(8000)

DECLARE Delimited_Values CURSOR FAST_FORWARD
FOR
SELECT [value]
FROM STRING_SPLIT('a,b,c,d,e',',')

OPEN Delimited_Values;

FETCH NEXT FROM Delimited_Values
INTO @value;

WHILE @@FETCH_STATUS = 0 BEGIN

    SELECT @value; --Do your stuff here

    FETCH NEXT FROM Delimited_Values
    INTO @value;

END;

CLOSE Delimited_Values;
DEALLOCATE Delimited_Values;

这篇关于如何创建一个分割逗号分隔值的SQL函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆