2

这段代码:

USE [db]
GO
/****** Object:  UserDefinedFunction [dbo].[GetFieldPickerReports]    Script Date: 01/11/2013 19:12:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER  FUNCTION [dbo].[GetFieldPickerReports] (@CustomerName  varchar(100))
RETURNS TABLE
AS 
  RETURN SELECT [fpr].[ID], [fpr].[Name], [fpr].[Global], [fpr].[FPRCategoryID]
  FROM FieldPickerReport fpr, dbo.GetProductKeyIdByCustomer(@CustomerName) pk 
  LEFT JOIN [FPRCategory] fprcat on ([fpr].[FPRCategoryID]=[fprcat].[ID])
  WHERE [Global]=1 OR ProductKeyID=pk.id

产生错误:

无法绑定多部分标识符“fpr.FPRCategoryID”。

此查询在没有Left Join(我目前需要添加的)或删除dbo.GetProductKeyIdByCustomer()andWhere子句的情况下工作。

这是代码dbo.GetProductKeyIdByCustomer()

USE [db]
GO
/****** Object:  UserDefinedFunction [dbo].[GetProductKeyIdByCustomer]    Script Date: 01/11/2013 19:58:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER  FUNCTION [dbo].[GetProductKeyIdByCustomer] (@CustomerName  varchar(100))
RETURNS TABLE
AS
   RETURN SELECT id
   FROM ProductKey
   WHERE [CustomerName]=@CustomerName AND Enabled=1

我的查询有什么问题?

4

1 回答 1

3

首先,我认为这些 UDF 会更好地实现为视图。

其次,您正在混合隐式和显式连接。使用所有显式连接应该可以解决您的问题:

SELECT 
    [fpr].[ID], 
    [fpr].[Name], 
    [fpr].[Global], 
    [fpr].[FPRCategoryID]
FROM 
    FieldPickerReport fpr
    JOIN dbo.GetProductKeyIdByCustomer(@CustomerName) pk 
        ON [Global] = 1 OR ProductKeyID = pk.id
    LEFT JOIN FPRCategory fprcat 
        ON fpr.FPRCategoryID = fprcat.ID
于 2013-01-11T18:06:28.810 回答