如果SQL Server表存在,请检查并返回行

如果SQL Server表存在,请检查并返回行,sql,sql-server,tsql,sql-function,Sql,Sql Server,Tsql,Sql Function,我正在开发一个涉及SQL Server表的应用程序。我正在编写一个查询,其中我需要检查一个表,如果该表存在,我需要从该表中选择记录,如果该表不存在于该数据库中,我需要从另一个表中选择 我试着用UDF写同样的东西,但没有成功。我无法使用存储过程,因为我需要将输出连接到另一个表 有没有办法做到这一点 CREATE FUNCTION dbo.udf_school_information (@univ_id INT) RETURNS @returntable TABLE ( univ_

我正在开发一个涉及SQL Server表的应用程序。我正在编写一个查询,其中我需要检查一个表,如果该表存在,我需要从该表中选择记录,如果该表不存在于该数据库中,我需要从另一个表中选择

我试着用UDF写同样的东西,但没有成功。我无法使用存储过程,因为我需要将输出连接到另一个表

有没有办法做到这一点

CREATE FUNCTION dbo.udf_school_information 
    (@univ_id INT)
RETURNS @returntable TABLE
(
    univ_id INT,
    school_number INT,
    school_name NVARCHAR(255),
    school_address NVARCHAR(255),
    state NVARCHAR(150),
    district NVARCHAR(100),
    start_date datetime
)
AS
BEGIN
    DECLARE @tbl_exists BIT;

    SET @tbl_exists = ISNULL((SELECT 1 FROM INFORMATION_SCHEMA.TABLES 
                              WHERE Table_Name LIKE '%School'),0)

    IF @tbl_exists = 1      
    BEGIN
        SELECT 
            university_id, school_number, school_name, 
            school_address, school_state, district, school_started_date 
        FROM 
            [dbo].[tbl_school_info] 
        WHERE 
            id = @univ_id
    END
    ELSE
    BEGIN
        ---- My condition if school_ingo table does not exists 
        ---- will be querying another table.
    END

    RETURN;
END;
GO
以上是抛出的错误

Msg 444,16级,状态2,程序udf\U站点信息,第24行 [批处理开始行15]选择函数中包含的语句 无法将数据返回到客户端


显然,你没有收到你的结果。这是因为您没有在结果表中插入数据集:

insert into @returntable
SELECT university_id,...
加上这个,它应该会工作。也要改变这种存在性检查,因为每个人都认为问题存在:)

您应该能够简单地使用此表单

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Feeds]') AND type in (N'U'))
  --abc
ELSE
  -- xyz
与信息_模式相同:

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES where TABLE_NAME like 'feeds')
BEGIN
 print 'exists'
END

显然,你没有收到你的结果。这是因为您没有在结果表中插入数据集:

insert into @returntable
SELECT university_id,...
加上这个,它应该会工作。也要改变这种存在性检查,因为每个人都认为问题存在:)

您应该能够简单地使用此表单

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Feeds]') AND type in (N'U'))
  --abc
ELSE
  -- xyz
与信息_模式相同:

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES where TABLE_NAME like 'feeds')
BEGIN
 print 'exists'
END
N'U'
一起用作对象类型:

CREATE FUNCTION dbo.udf_school_information (@univ_id INT)
RETURNS @returntable TABLE
(
    univ_id INT,
    school_number INT,
    school_name NVARCHAR(255),
    school_address NVARCHAR(255),
    state NVARCHAR(150),
    district NVARCHAR(100),
    start_date datetime
)
AS
BEGIN
    DECLARE @tbl_exists BIT;

    IF OBJECT_ID(N'[dbo].[tbl_school_info]', N'U') IS NOT NULL SET @tbl_exists = 1
    ELSE SET @tbl_exists = 0;

    IF @tbl_exists = 1      
    BEGIN
       -- Statements
    ELSE
    BEGIN
        -- My condition if school_ingo table does not exists 
        -- will be querying another table.
    END
END;
GO
N'U'
一起用作对象类型:

CREATE FUNCTION dbo.udf_school_information (@univ_id INT)
RETURNS @returntable TABLE
(
    univ_id INT,
    school_number INT,
    school_name NVARCHAR(255),
    school_address NVARCHAR(255),
    state NVARCHAR(150),
    district NVARCHAR(100),
    start_date datetime
)
AS
BEGIN
    DECLARE @tbl_exists BIT;

    IF OBJECT_ID(N'[dbo].[tbl_school_info]', N'U') IS NOT NULL SET @tbl_exists = 1
    ELSE SET @tbl_exists = 0;

    IF @tbl_exists = 1      
    BEGIN
       -- Statements
    ELSE
    BEGIN
        -- My condition if school_ingo table does not exists 
        -- will be querying another table.
    END
END;
GO
这会有用的! 您需要在查询中以
变量
的形式返回数据。您需要定义所有的变量,无论您想要哪个作为输出。 我用我的虚拟表示例更改了您的示例。您可以根据您的要求使用 让我给你举个例子

ALTER FUNCTION dbo.udf_school_information (@univ_id INT)
RETURNS @returntable TABLE
(
    univ_id INT

)
AS
BEGIN

    declare @tbl_exists bit
    Declare @Outputdata varchar(100)

    IF OBJECT_ID(N'[dbo].[tblprojectresource]', N'U') IS NOT NULL SET @tbl_exists = 1
    ELSE SET @tbl_exists = 0;

    IF @tbl_exists = 1      
    BEGIN
        select @Outputdata =ProjectResourceId from tblProjectResource Where ProjectResourceId =@univ_id
       -- Statements
    END
    ELSE
    BEGIN
        select @Outputdata =ProjectId from tblprojectmaster Where projectid =@univ_id
    END
END;
GO
这会有用的! 您需要在查询中以
变量
的形式返回数据。您需要定义所有的变量,无论您想要哪个作为输出。 我用我的虚拟表示例更改了您的示例。您可以根据您的要求使用 让我给你举个例子

ALTER FUNCTION dbo.udf_school_information (@univ_id INT)
RETURNS @returntable TABLE
(
    univ_id INT

)
AS
BEGIN

    declare @tbl_exists bit
    Declare @Outputdata varchar(100)

    IF OBJECT_ID(N'[dbo].[tblprojectresource]', N'U') IS NOT NULL SET @tbl_exists = 1
    ELSE SET @tbl_exists = 0;

    IF @tbl_exists = 1      
    BEGIN
        select @Outputdata =ProjectResourceId from tblProjectResource Where ProjectResourceId =@univ_id
       -- Statements
    END
    ELSE
    BEGIN
        select @Outputdata =ProjectId from tblprojectmaster Where projectid =@univ_id
    END
END;
GO

为什么你的方法不起作用?你有错误吗?@linden.phoenix更新了错误。然后使用我的答案。是的,你需要插入@returntable SELECT university_id,…为什么你的方法不起作用?你有错误吗?@linden.phoenix更新了错误。然后使用我的答案。是的,你需要在@returntable SELECT university\u id中插入,…你的代码可能不会像你在
@outputdata
中选择的那样工作,仍然没有填充
@returntable
只需在末尾填充@returntable即可。这会奏效的。它在本地运行,当您在
@outputdata
中选择时,您的代码可能无法运行,并且仍然没有填充
@returntable
只需在末尾填充@returntable即可。这会奏效的。我在当地进行了试验,并且正在发挥作用