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;