我试图通过创建以下函数将一些逻辑应用于我的选择:
ALTER FUNCTION [dbo].[SelectemnExportObject]
(@TITLE NVARCHAR(MAX))
RETURNS NVARCHAR(20)
AS
BEGIN
DECLARE @Str NVARCHAR(MAX) = ''
DECLARE @Definition1 VARCHAR(MAX) = (SELECT DEFINITION1
FROM [dbo].test
WHERE title = @Title)
DECLARE @Definition2 VARCHAR(MAX) = (SELECT DEFINITION2
FROM [dbo].test
WHERE title = @Title)
DECLARE @Definition3 VARCHAR(MAX) = (SELECT DEFINITION3
FROM [dbo].test
WHERE title = @Title)
IF @Definition1 <> ''
SET @str = @Definition1
ELSE IF @Definition2 <> ''
SET @str = @str + '<br />' + @Definition2
ELSE IF @Definition3 <> ''
SET @str = @str + '<br />' + @Definition3
RETURN @Str
END
我是否正确地说,称这个功能是这样的?
select *
from [dbo].[SelectemnExportObject]('absconding')
我正在尝试创建一行信息,单元格1将包含@str,然后将创建另一个名为@ str2的依此类推..
如果我想完成此操作,是否需要返回其他内容?
我很感激帮助,如果标记不正确,请提前道歉
答案 0 :(得分:3)
因为函数返回标量值,所以它是一个标量函数,你会称之为:
select [dbo].[SelectemnExportObject]('absconding') AS [Str1]
,[dbo].[SelectemnExportObject]('abscondin2') AS [Str2]
如果函数返回一个表(内联表值函数或多语句值函数),那么当你从表中选择时,你需要从中调用它/ select。
select * from [dbo].[SelectemnExportObject]('absconding')
修改
要使函数返回多个值,您需要将此函数转换为多语句表值函数。函数定义看起来像......
CREATE FUNCTION [dbo].[SelectemnExportObject] ( @TITLE NVARCHAR(MAX) )
RETURNS @Result TABLE
(Str1 NVARCHAR(MAX) NOT NULL,
Str2 NVARCHAR(MAX) NOT NULL)
AS
BEGIN
DECLARE @Str1 NVARCHAR(MAX) = '';
DECLARE @Str2 NVARCHAR(MAX) = '';
/* Populate the values of @Str1 and @Str2 how ever you need to */
INSERT INTO @Result (Str1 , Str2)
VALUES (@Str1 , @Str2)
RETURN;
END