如何在创建表时明确定义一个SELECT语句,该语句从另一个现有表中获取特定数据?

时间:2014-05-29 13:42:15

标签: sql sql-server tsql sql-server-2008

我现在已经在这方面苦苦挣扎了一段时间,我试图定义我的表,以便特定列将使用发送并存储在其他列中的数据来查找单独表中的数据然后将其存储在所述列中。

我尝试过使用存储过程 - 不允许我按以下方式调用该过程

[to] AS EXECUTE procName @parameter1 = [info],
                         @parameter2 = [info2],
                         @outputparmeter = @output OUTPUT

我还尝试调用函数,但发现在搜索函数内的表时,您无法使用SELECT语句。 (< - 不确定这是否完全准确,但是通过我的广泛搜索,这是我已经得出的结论,请随意纠正我,或者只是澄清它是真是假作为声明)。

在此之后开始搜索并尝试使用调用存储过程的函数,在过程中搜索备用表,将其传递回函数,该函数又将其传递回列。这似乎没问题,直到我执行了我的查询,此时它爆炸并告诉我在函数中不能有EXECUTE语句。

如果你们能够解决任何这些问题并且理想地解决我的问题,我会很感激帮助。

编辑:

表用户SAMPLE(这里的所有内容都有效。)

CREATE TABLE [dbo].Users
(
    [userId] [int] NOT NULL IDENTITY,
    [firstname] [nvarchar](50) NOT NULL,
    [lastname] [nvarchar](50)  NOT NULL,
    [dateOfBirth] [date] NOT NULL,
    [age] AS [dbo].getAge([dateOfBirth])
)

表消息SAMPLE(此处列出问题)

CREATE TABLE [dbo].Messages
(
    [messageId] [int] NOT NULL IDENTITY,
    [fromFirstName] [nvarchar](50) NOT NULL,
    [fromLastName] [nvarchar](50) NOT NULL,
    [from] [int], --This needs to search for data within the Users table using the [fromFirstName] and [fromLastName] to get the userId for the specified user.
    [toFirstName] [nvarchar](50) NOT NULL,
    [toLastName] [nvarchar](50) NOT NULL,
    [to] [int],    --This needs to search for data within the Users table using the [toFirstName] and [toLastName] to get the userId for the specified user.
    [content] [nvarchar](999) NOT NULL,
    [dateSent] [date] DEFAULT GETDATE()
)

尝试了以下内容:

  • 存储过程 - 无法调用过程,如图所示 原帖。
  • 用户定义的函数 - 无法使用SELECT语句获取 来自Users表的数据。
  • 用户定义的函数调用存储过程 - 无法使用 函数中的EXECUTE语句?

1 个答案:

答案 0 :(得分:0)

根据此post,您可以使用udf填充计算列,而udf可以访问其他表。我还没有测试过这个功能,也许这个例子将有助于扩展您以前的尝试。一个相关的问题似乎是使用这种技术:SQL Creating UDF Computed columns

引用:

  

访问计算列表外的列

     

计算列无法直接访问其外部的任何列   表。使用用户定义可以克服此限制   功能。可以在表达式中使用UDF来访问任何列   在计算列表之外。