gpt4 book ai didi

sql - 函数返回表变量

转载 作者:行者123 更新时间:2023-12-02 09:28:59 25 4
gpt4 key购买 nike

我正在尝试创建一个返回表变量的函数。所以首先我从 Table1 获取数据并将其放入另一个表变量中。这里我想检查这个变量是否为空函数返回参数结果否则返回表变量的结果函数脚本如下:

USE[DATABase1]
GO

IF OBJECT_ID (N'CodeFunc', N'TF') IS NOT NULL DROP FUNCTION dbo.CodeFunc;
GO

CREATE FUNCTION CodeFunc ( @Code nvarchar(4) , @Table nvarchar(40) = '' )
RETURNS @VirtualDAT TABLE
(
RowID INT IDENTITY ( 1 , 1 ),
Code nvarchar(400)
)
AS
BEGIN
DECLARE @CodeM nvarchar(400)
DECLARE @imax INT SET @imax = @@ROWCOUNT
DECLARE @i INT SET @i = 1

DECLARE @SelectDAT TABLE
(
RowID INT IDENTITY ( 1 , 1 ),
Code nvarchar(400)
)
INSERT @SelectDAT
SELECT Code FROM table1
WHERE table1.id = 41

IF(EXISTS (SELECT 1 FROM @SelectDAT))
BEGIN
WHILE (@i <= @imax)
BEGIN
SELECT @CodeM = Code FROM @SelectDAT WHERE RowID = @i
INSERT INTO @VirtualDAT(Code) VALUES (@CodeM)

SET @i = @i + 1
END
END

ELSE
INSERT INTO @VirtualDAT(Code) VALUES (@Code)

RETURN
END

所以这个脚本无需将其放入函数中即可工作。

我像这样测试这个函数:SELECT * FROM dbo.CodeFunc( 'toto',Default ) 结果是: IF(EXISTS (SELECT 1 FROM @SelectDAT)) 没有返回记录esle 结果还可以

最佳答案

正如 VR46 所说。 @@ROWCOUNT 将被设置为 0,因为它之前没有查询。函数中执行的任何代码都作为一组单独的查询发生。它可能在函数外部返回一个值,因为您之前已将查询窗口用于另一个不相关的查询

您可以非常戏剧性地重构这个函数。看下面,@@ROWCOUNT 将在这里工作,因为它就在插入查询之后,并且肯定会有一个基于插入的值。

我无法对此进行测试,但我认为类似的东西应该可以完成相同的工作。

USE[DATABase1]
GO

IF OBJECT_ID (N'CodeFunc', N'TF') IS NOT NULL DROP FUNCTION dbo.CodeFunc;
GO

CREATE FUNCTION CodeFunc ( @Code nvarchar(4) , @Table nvarchar(40) = '' )
RETURNS @VirtualDAT TABLE
(
RowID INT IDENTITY ( 1 , 1 ),
Code nvarchar(400)
)
AS
BEGIN

insert into @VirtualDAT
Select Code from table1 where table1.id = 41

if @@ROWCOUNT = 0
begin
INSERT INTO @VirtualDAT(Code) VALUES (@Code)
end
RETURN
END

关于sql - 函数返回表变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35013508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com