2013-02-18 49 views
0

我对SQL Server非常陌生,我给了一个赋值来创建一个函数(这是我以前从未做过的)。创建一个从备用表和数据库获取数据的函数

以下是函数应该执行的操作: 数据库中有三个表具有出生日期。其中两个表位于database1中,而第三个表位于database2中。

所以我的功能需要(当被调用/使用)进入数据库1和表1以查看特定人员的出生日期是否可用。如果是的话,抓住那个价值。如果否,则查看表2.最后,如果两个表都没有出生日期,则转到数据库2和表3以获取出生日期。

这可能吗?函数可以从两个不同的数据库中获取数据吗?

任何帮助表示赞赏!

谢谢!

+0

它可能是也可能不是可能的。您必须编写函数的事实与您是否必须访问多个数据库无关。这是一个权限问题。我建议你先写一个查询,然后把查询转换成一个函数。 – 2013-02-18 14:16:30

回答

3

这是创建功能的一种方法:

CREATE FUNCTION [dbo].[GetDatOfBirth](@PersonID INT) 
RETURNS DATE 
AS 
BEGIN 
    DECLARE @DateOfBirth DATE 

    SELECT @DateOfBirth = DateOfBirth 
    FROM Database1..Table1 
    WHERE PersonID = @PersonID 

    IF @DateOfBirth IS NULL 
    BEGIN 
     SELECT @DateOfBirth = DateOfBirth 
     FROM Database1..Table2 
     WHERE PersonID = @PersonID 
    END 
    IF @DateOfBirth IS NULL 
    BEGIN 
     SELECT @DateOfBirth = DateOfBirth 
     FROM Database2..Table1 
     WHERE PersonID = @PersonID 
    END 

RETURN(@DateOfBirth) 
END 

免责声明:像这往往标量函数是性能杀手,所以我其他的选择倒是建议(如使用此表上联接)在大多数情况下, 。

+0

我打算以同样的方式回答。你可以写一个查询......但是,如果你写了一个查询,它会打到所有3个表来确定一个值。这个答案......只有当你需要的时候,你支付了#2的命中价格并且击中了#3。 – granadaCoder 2013-02-18 14:22:36

+0

@granadaCoder我也这么认为。 Mahmoud的答案在基于集合的解决方案(可能创建视图?)上更有用,因此它可以用于连接,并且可能比UDF在此方面的表现更好 – Lamak 2013-02-18 14:25:22

+0

是的。它“只取决于”。我喜欢UNION中的一个视图,但是......第二个和第三个“选项”可能是一个链接服务器....然后你必须处理多行的可能性。 – granadaCoder 2013-02-18 20:55:41

2

要访问的表,从另一个数据库,使用语法:

Database.Schema.Object 

请注意,这只会在同一台服务器上运行。如果你的数据库在不同的服务器上,你需要创建一个链接服务器。

要创建用户定义的函数,检查出:

http://msdn.microsoft.com/en-us/library/ms186755.aspx

相关问题