存储过程不设置变量

Stored procedure not setting variable

我试过但不明白我的代码有什么问题。我试图在调用第二个存储过程的存储过程中设置一个变量,但据我所知,我知道变量设置不正确。谁能告诉我哪里错了

CREATE PROCEDURE [dbo].[ColumnHasData]
    @scheme VARCHAR(10),
    @tablename VARCHAR(30),
    @column VARCHAR(50)
AS
BEGIN

    DECLARE @FullQuery NVARCHAR (max)=N'
        IF EXISTS
        (
            SELECT *
            FROM ' + @scheme + '.' + @tablename + '
            WHERE [' + @column + '] IS NOT NULL
        )
        SELECT CAST(1 AS BIT)
        ELSE 
        SELECT CAST(0 AS BIT)
    ';

    EXECUTE sp_executesql @FullQuery;
END

CREATE PROCEDURE [dbo].[me_delete_column]
AS
BEGIN

    Declare @noDataPresent bit
    
    exec @noDataPresent = [different_db].[dbo].[ColumnHasData] 'int' ,'table1' ,'column1'

    print @noDataPresent

    RETURN
    IF(@noDataPresent=0)
    begin
        --drop column
    end
    
END

ColumnHasData 在一个数据库上

me_delete_column 在第二个数据库上

我正在尝试设置变量 @noDataPresent 执行 ColumnHasData

尽管我知道结果应该是 1 print @noDataPresent returns 0 所以有些地方不对。

出了什么问题,为什么我的变量没有设置? SQL 服务器版本为 15.0.4102.2

使用输出参数从存储过程传递标量值。唯一有点棘手的部分是在动态 SQL.

中设置参数

EG

CREATE PROCEDURE [dbo].[ColumnHasData]
    @schema NVARCHAR(128),
    @tablename NVARCHAR(128),
    @column NVARCHAR(128),
    @hasData bit output
AS
BEGIN

    DECLARE @FullQuery NVARCHAR (max)=N'
        IF EXISTS
        (
            SELECT *
            FROM ' + quotename(@schema) + '.' + quotename(@tablename) + '
            WHERE ' + quotename(@column) + ' IS NOT NULL
        )
        set @hasData = CAST(1 AS BIT)
        ELSE 
        set @hasData = CAST(0 AS BIT)
    ';

    EXECUTE sp_executesql @FullQuery, N'@hasData bit output', @hasData = @hasData output;
END

示例数据

use tempdb 
drop table if exists t 
create table t(id int, a int null)
insert into t(id,a) values (1,null)

用法:

declare @hasData bit
exec ColumnHasData 'dbo','t','id', @hasData output

select @hasdata 

declare @hasData bit
exec ColumnHasData 'dbo','t','a', @hasData output

select @hasdata