3 回答
TA贡献1847条经验 获得超11个赞
尝试从SELECT子句中删除括号。从Microsoft TechNet,使用SELECT子句的INSERT语句的正确语法如下。
INSERT INTO MyTable (PriKey, Description)
SELECT ForeignKey, Description
FROM SomeView
你得到的错误,“SELECT将检查超过MAX_JOIN_SIZE行;检查你的WHERE并使用SET SQL_BIG_SELECTS = 1或SET SQL_MAX_JOIN_SIZE =#如果SELECT没问题。”,实际上是正确的,假设你有两行BOOK和temp_cheques。您正在尝试查询两个表中的所有行并进行交叉引用,从而产生m * n大小的查询。在执行可能很长的操作之前,SQL Server正试图警告您。
SQL_BIG_SELECTS在运行此语句之前设置= 1,然后重试。它应该工作,但请注意,此操作可能需要很长时间。
TA贡献1829条经验 获得超13个赞
B是否包含UNITS列?
temp_cheques和Book的表结构是什么?
在进行+/-和比较时,所有列都应该是数字。
以下简单的SELECT是否有效?
SELECT b.START_NUMBER+b.UNITS-1 FROM Books B
TA贡献1811条经验 获得超5个赞
查询的最终版本如下:
Set SQL_BIG_SELECTS = 1;
INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION)
SELECT a.number, b.ID, b.DENOMINATION
FROM temp_cheques a, BOOK b
WHERE a.number BETWEEN b.START_NUMBER AND (b.START_NUMBER+b.UNITS-1);
BETWEEN语句的解析需要括号,SELECT没有,并且由于两个表的大小(temp_cheques中的215000条记录,BOOK中的8000条),我打破了选择大小的限制,要求我设置SQL_BIG_SELECTS = 1 。
添加回答
举报