首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSSQL+Symfony 4.4存储过程空结果理论

MSSQL+Symfony 4.4存储过程空结果理论
EN

Stack Overflow用户
提问于 2020-12-01 05:05:25
回答 1查看 65关注 0票数 1

我有一个存储过程。当我从执行它时,一切正常,我得到了一个结果。但是当我从我的理论中执行它时,我总是得到一个无效的结果,它是否成功并不重要。

代码语言:javascript
复制
CREATE procedure [dbo].[approve_pre_register_demand]
    @hashLink varchar(max) AS
BEGIN
    DECLARE @bClientId uniqueidentifier; 
    -- check is token valid and not deactivated
    BEGIN
        --get uuid by link
        SELECT @bClientId = [dbo].[b_client_pre_registration_link].[b_client_uuid] 
        FROM [dbo].[b_client_pre_registration_link]
        WHERE [dbo].[b_client_pre_registration_link].[hash_link] LIKE @hashLink
    END
    BEGIN
        IF NOT EXISTS(SELECT [b_client_uuid] FROM [dbo].[b_client_pre_registration_link] WHERE [hash_link] LIKE @hashLink)
            BEGIN
                RETURN 'Token does not exists'
            END
    END
    BEGIN
        IF NOT EXISTS(SELECT [dbo].[sa_temp_b_client].[uuid] FROM [dbo].[sa_temp_b_client] WHERE [dbo].[sa_temp_b_client].[uuid] LIKE @bClientId)
            BEGIN
                RETURN 'BClient does not exists'
            END
    END
    BEGIN
        IF NOT EXISTS(SELECT [dbo].[at_b_client_files].[b_client_uuid] FROM [dbo].[at_b_client_files] WHERE [dbo].[at_b_client_files].[b_client_uuid] LIKE @bClientId)
            BEGIN
                RETURN 'BClient files does not exists'
            END
    END
    -- move preregistration to permanent tables
    BEGIN
        BEGIN
            BEGIN TRANSACTION
                BEGIN

                    IF (@@error <> 0)
                        -- Отменить транзакцию, если есть ошибки
                        ROLLBACK
                END
            COMMIT
            SELECT 'RESULT' = @hashLink
        END
    END
END
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-01 06:18:43

在最后一次声明中,您将返回:

代码语言:javascript
复制
SELECT 'RESULT' = @hashLink

如果您在或Azure中测试这一点,您将看到上面生成的一行包含一个名为RESULT的列

代码语言:javascript
复制
DECLARE  @hashLink varchar(max) = 'test'
 
SELECT 'RESULT' = @hashLink;

在其他情况下,您有一个RETURN,它将产生一个错误:

代码语言:javascript
复制
CREATE PROCEDURE dbo.TEST 
(
    @hashLink varchar(max)
)
AS
BEGIN;

    RETURN 'text'

END;

GO

EXEC dbo.TEST @hashLink = 'x'

如下所示:

Msg 245、级别16、状态1、过程dbo.TEST、第8行批处理开始行14转换在将varchar值“text”转换为数据类型int时失败。

完工时间: 2020-12-01T08:17:03.7036860+02:00

因此,只需将RETURN语句更改为带有alias.SELECT

此外,如果要使用RETURN获取值,则使用该值的方式如下:

代码语言:javascript
复制
CREATE OR ALTER PROCEDURE dbo.TEST 
(
    @hashLink varchar(max)
)
AS
BEGIN;

    RETURN  5

END;

GO

DECLARE @A INT;

EXEC @A = dbo.TEST @hashLink = 'x'

SELECT @A;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65085014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档