SQL Server 2008列前缀错误

SQL Server 2008列前缀错误,sql,sql-server,tsql,Sql,Sql Server,Tsql,所以我让它正常工作: CREATE FUNCTION dbo.GetLiveStream(@UserName NVARCHAR(MAX)) RETURNS TABLE AS RETURN ( SELECT DISTINCT l.* FROM StreamView l JOIN Friendships f ON f.Sender = @UserName OR f.Recipient = @UserName WHERE l.Sender <&g

所以我让它正常工作:

CREATE FUNCTION dbo.GetLiveStream(@UserName NVARCHAR(MAX)) RETURNS TABLE
AS
  RETURN (
    SELECT DISTINCT l.* 
      FROM StreamView l
      JOIN Friendships f ON f.Sender = @UserName OR f.Recipient = @UserName 
     WHERE l.Sender <> @UserName 
       AND l.Recipient <> @UserName 
       AND (   l.Sender = f.Recipient 
            OR l.Sender = f.Sender 
            OR l.Recipient = f.Sender 
            OR l.Recipient = f.Recipient) 

  )
GO

如何解决这个问题?谢谢。

您不能在WHERE子句中引用别名。这样做:

select *
from
(
    SELECT ROW_NUMBER() OVER(ORDER BY DateTime DESC) AS RowNumber, 
           * 
      FROM dbo.GetLiveStream('jason') 
) a
  WHERE RowNumber >= 0
  AND RowNumber < 0+ 10; 

至于您的l.*错误,这是因为该别名是函数及其查询定义的本地别名,不能在其外部引用。

不要在存储过程或函数中使用*,因为它会被编译到列列表中,这些列可能会随时间而变化,从而破坏编译后的代码。SQL Server不会在发生这种情况时向您发出警告。

虽然这是一个谨慎而好的建议,但它不会解决OP面临的直接问题。
RETURN (
    SELECT DISTINCT l.* 
      FROM StreamView l
      JOIN Friendships f ON f.Sender = @UserName OR f.Recipient = @UserName 
     WHERE l.Sender <> @UserName 
       AND l.Recipient <> @UserName 
       AND (   l.Sender = f.Recipient 
            OR l.Sender = f.Sender 
            OR l.Recipient = f.Sender 
            OR l.Recipient = f.Recipient) AND f.IsPending = 0

  )
select *
from
(
    SELECT ROW_NUMBER() OVER(ORDER BY DateTime DESC) AS RowNumber, 
           * 
      FROM dbo.GetLiveStream('jason') 
) a
  WHERE RowNumber >= 0
  AND RowNumber < 0+ 10;