【问题标题】:User Defined Function SQL Error用户定义函数 SQL 错误
【发布时间】:2018-08-12 20:21:18
【问题描述】:

我写了这个函数,但是它没有返回地址表信息。

CREATE FUNCTION returnInfo()
RETURNS TABLE
AS RETURN
SELECT
SalesLT.Customer.CustomerID, 
FirstName,
LastName,
Phone
FROM SalesLT.Customer
RIGHT JOIN SalesLT.Address 
ON SalesLT.Customer.CustomerID = SalesLT.Address.AddressID; 

CustomerID 和 AddressID 都是表的主键,它们不共享外键。关于如何将地址表加入我选择的任何想法?

【问题讨论】:

  • 你不能在视图中创建用户定义的函数.....检查the official documentation on CREATE VIEW - 它基本上只是一个SELECT(可能有JOINs和WHERE) - 但你绝对不能创建视图定义中的其他数据库对象
  • 如果 SalesLT.Customer 和 SalesLT.Address 表不共享外键,那么这让我怀疑您在 SalesLT 的某个地方有一个表,该表具有这两个表的外键。可能类似于 SalesLT.CustomerAddress。但您的查询似乎只使用来自客户的字段。除非您需要加入似乎不需要的地址。
  • 是的,SalesLT.CustomerAddress 确实包含两个外键。我应该在两个外键上加入 CustomerAddress 吗?
  • CustomerAddress 应该加入到 Customer 和 address,它们不应该直接加入到对方。请注意,这意味着一个客户可以有两个以上的地址,或者一个地址可以有多个客户。
  • @Javascripttech 你已经按照你的方式编辑了你自己的问题。我回滚了你的破坏性编辑。随意删除此问题,但不要破坏问题内容。

标签: sql-server view user-defined-functions


【解决方案1】:

我不明白你为什么觉得需要在视图中创建一个函数……你想完成什么??

SQL Server 中的 VIEW 基本上只是一个存储的 SELECT - 可能带有 JOIN 和 WHERE 子句 - 但仅此而已。这或多或少正是您的“嵌套”UDF 正在做的事情......

根据您发布的内容,您可以像这样定义该视图:

CREATE VIEW [dbo].[Customer]
AS 
    SELECT
        CustomerID, 
        FirstName,
        LastName,
        Phone
    FROM 
        SalesLT.Customer;
GO

在这里创建任何用户定义的函数绝对没有必要也没有好处......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2010-12-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2018-06-30
    相关资源
    最近更新 更多