如果SQL Server表存在,请检查并返回行
我正在开发一个涉及SQL Server表的应用程序。我正在编写一个查询,其中我需要检查一个表,如果该表存在,我需要从该表中选择记录,如果该表不存在于该数据库中,我需要从另一个表中选择 我试着用UDF写同样的东西,但没有成功。我无法使用存储过程,因为我需要将输出连接到另一个表 有没有办法做到这一点如果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_
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即可。这会奏效的。我在当地进行了试验,并且正在发挥作用