簡體   English   中英

檢查並返回行(如果存在SQL Server表)

[英]Check and Return rows if SQL Server table exists

我正在處理涉及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

上面是拋出錯誤

消息444,級別16,狀態2,過程udf_site_information,第24行[批處理開始第15行]函數中包含的Select語句無法將數據返回給客戶端。

您顯然沒有收到結果。 那是因為您沒有在結果表中插入數據集:

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

與information_schema相同:

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

使用OBJECT_ID()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

這將起作用! 您需要將查詢中的數據作為variable返回。 您需要定義所有要用作輸出的變量。 我用我的虛擬表示例更改了您的示例。 您可以根據自己的要求使用我給您舉一個例子

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM