我有困扰结合这两个SQL查询。我有这个原始查询从两个表中选择数据,相关的列是Tasks.CustomerID和Customers.CustomerID。它基本上任务。* + Customers.Name结合这两个SQL查询
ALTER PROCEDURE [dbo].[SP_SelectTasksandName]
AS
SELECT TASKS.CustomerID, TASKS.DateCreation, TASKS.DateFinish, TASKS.Description, TASKS.Fees, TASKS.Hours, TASKS.InvoiceNum, TASKS.PaymentMethod,
TASKS.Status, TASKS.TaskID, CUSTOMERS.Name
FROM TASKS, CUSTOMERS
WHERE (TASKS.CustomerID LIKE CUSTOMERS.CustomerID)
这工作,但现在我已经被要求限制此查询到指定的行数量。我发现这个代码适用于其他更简单的查询,但我似乎无法正确使用此查询。此限制代码如下。 (即所有行> @low & &行< = @high)
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY CustomerID) as row FROM CUSTOMERS
) a WHERE ((a.row > @low and a.row <= @high)
这是最接近我已经得到了,但我在这里卡住。
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY TASKS.CustomerID) as row FROM
(SELECT TASKS.CustomerID, TASKS.DateCreation, TASKS.DateFinish, TASKS.Description, TASKS.Fees, TASKS.Hours, TASKS.InvoiceNum, TASKS.PaymentMethod,
TASKS.Status, TASKS.TaskID, CUSTOMERS.Name
FROM TASKS, CUSTOMERS
WHERE (TASKS.CustomerID LIKE CUSTOMERS.CustomerID))
) a WHERE (a.row > @low and a.row <= @high)
在最后一行的第一个括号上出现“期待为id或带引号的id”错误。
对不起noob问题,感谢任何帮助你们可以给。
*行*被设定为在未来可能的[TSQL保留字MSSQL版本](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql#future-keywords)。考虑用方括号或不同的别名进行转义。你为什么不用通配符使用'LIKE'?使用显式的'INNER JOIN'。 – Parfait
感谢您的评论,我的SQL绝对是马虎!我需要为此努力。 –
备注:您应该**不要**为存储过程使用'sp_'前缀。微软已经保留了这个前缀以供自己使用(参见*命名存储过程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你将来有可能冒着名字冲突的风险。 [这对你的存储过程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是简单地避免使用'sp_'并将其他内容用作前缀 - 或者根本没有前缀! –