Joh*_*ohn 2 sql sql-server function
如何从查询中的SQL Server中的用户定义函数返回多个值(例如,数字和字符串)?
例如 select col1, dbo.function1(col2) from table
结果是
Col1 | Col2 | Col3
-----+-------------------+---------------------
x | Num from function | String from function
Run Code Online (Sandbox Code Playgroud)
我不想调用该函数2次,因为我使用了一些复杂的代码而且我不想执行它两次.只是在Return中取得最后2个结果
vmv*_*vel 10
摘录自 - http://www.sqlteam.com/article/returning-complex-data-from-user-defined-functions-with-cross-apply
从SQLF返回多个值可以在SQL Server中相当容易地完成,但我们必须将这些值作为虚拟表返回
--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
Run Code Online (Sandbox Code Playgroud)
我可能会创建一个表UDF.有点像这样:
CREATE FUNCTION [owner].[function_name]
(
@parm1 <datatpe> = <default>
)
RETURNS TABLE
AS
RETURN
(
SELECT <column1, column2, ...>
FROM <table, view, etc.>
WHERE <some condition applies> -- optional clauses
)
Run Code Online (Sandbox Code Playgroud)
更多信息在这里.
如果你只返回一行,这似乎是一种浪费,但我认为你的替代方案(xml,即时解析字符串中的值)会使事情变得更加艰难.