3 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
嘗試從SELECT子句中刪除括號(hào)。從Microsoft TechNet,使用SELECT子句的INSERT語句的正確語法如下。
INSERT INTO MyTable (PriKey, Description)
SELECT ForeignKey, Description
FROM SomeView
你得到的錯(cuò)誤,“SELECT將檢查超過MAX_JOIN_SIZE行;檢查你的WHERE并使用SET SQL_BIG_SELECTS = 1或SET SQL_MAX_JOIN_SIZE =#如果SELECT沒問題。”,實(shí)際上是正確的,假設(shè)你有兩行BOOK和temp_cheques。您正在嘗試查詢兩個(gè)表中的所有行并進(jìn)行交叉引用,從而產(chǎn)生m * n大小的查詢。在執(zhí)行可能很長(zhǎng)的操作之前,SQL Server正試圖警告您。
SQL_BIG_SELECTS在運(yùn)行此語句之前設(shè)置= 1,然后重試。它應(yīng)該工作,但請(qǐng)注意,此操作可能需要很長(zhǎng)時(shí)間。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
B是否包含UNITS列?
temp_cheques和Book的表結(jié)構(gòu)是什么?
在進(jìn)行+/-和比較時(shí),所有列都應(yīng)該是數(shù)字。
以下簡(jiǎn)單的SELECT是否有效?
SELECT b.START_NUMBER+b.UNITS-1 FROM Books B

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
查詢的最終版本如下:
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語句的解析需要括號(hào),SELECT沒有,并且由于兩個(gè)表的大?。╰emp_cheques中的215000條記錄,BOOK中的8000條),我打破了選擇大小的限制,要求我設(shè)置SQL_BIG_SELECTS = 1 。
添加回答
舉報(bào)