带有返回 2 个值的函数的 Sql 查询

标签 sql sql-server function

我将如何从查询中 SQL Server 中的用户定义函数返回多个值(例如,一个数字和一个字符串)?

例如 select col1, dbo.function1(col2) from table
结果是

Col1 |        Col2       |         Col3
-----+-------------------+---------------------
x    | Num from function | String from function

我不想调用该函数 2 次,因为我使用了一些复杂的代码并且我不想执行它两次。只是为了在 Return 中取最后 2 个结果

最佳答案

摘自 - http://www.sqlteam.com/article/returning-complex-data-from-user-defined-functions-with-cross-apply

Returning multiple values from a UDF can be done fairly easily in SQL Server, but we must return those values as a virtual table


--Sample Table
CREATE TABLE emails 
(
    ID INT PRIMARY KEY, 
    EmailAddress VARCHAR(100)
)
GO

--Dummy Data
INSERT INTO emails
SELECT 1,'jeff@jeff.com' UNION ALL
SELECT 2,'yak@sqlteam.com' UNION ALL
SELECT 3,'billg@microsoft.com'

--UDF Creation
CREATE FUNCTION EmailParse (@email VARCHAR(1000))
RETURNS @t TABLE (UserName VARCHAR(20), Domain VARCHAR(20))
AS
BEGIN
    DECLARE @i INT

    SELECT @i = charindex('@', @email,1);

    IF (@i > 1)
        INSERT INTO @t VALUES (LEFT(@email,@i-1), SUBSTRING(@email,@i+1,20))
    ELSE
        INSERT INTO @t VALUES (NULL,NULL)

    RETURN 
END


--UDF Usage
SELECT 
    emails.ID, s.Username, s.Domain
FROM 
    emails
CROSS APPLY 
EmailParse(emails.EmailAddress) s

关于带有返回 2 个值的函数的 Sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8903441/

相关文章:

sql-server - 带有 varchar(255) PRIMARY KEY 的表会造成什么伤害吗?

sql-server - 没有列名列表的tsql标识插入

javascript - 严格验证 Javascript xhtml 1.0 中的表单数据,不考虑此实例的服务器端脚本

JavaScript 为动态按钮和输入创建函数

php - SQL JOIN ON 表名等于字段值

php - 如何使用mysql查找有效期

php - 使用SQL以不同方式输出表

mysql "KEEP ONLY"命令?

sql-server - 实体命令执行异常 : Azure SQL with Entity Framework slow and rejecting requests

matlab - 从 Matlab 函数返回多个输出变量