2015-12-03 76 views
1

沿着插入來自select語句的值到表中我有一個名爲ROLES角色IDROLEDESC作爲列的表。 我試圖從ROLES表得到最大角色ID並將其存儲在另一個表中的硬編碼值一起說「NEWROLEDESC」如何使用硬編碼的值

新的表結構(即「DROLES」。): DIDDROLEDESC其中DROLEDESC是用硬編碼值來填充和DID是填充了select語句的值:SELECT MAX(ROLEID)+1 as maxroleid FROM ROLES

我曾嘗試:

insert into DROLES(DID) SELECT MAX(ROLEID)+1 FROM ROLES 

現在,上面插入DID中的最大ID,但是當我嘗試

insert into DROLES(DID,DROLEDESC) 
values ((SELECT MAX(ROLEID)+1 FROM ROLES),'NEWROLEDESC') 

它不work.Ofcourse的SQL語法不正確。有沒有辦法實現它/正確的SQL語法?

注意:我只是寫這個作爲一個實驗。我知道AUTO增量會做到這一點。除此之外的任何事情?

+4

'插入DROLES(DID,DROLEDESC)SELECT MAX(ROLEID)+1,'NEWROLEDESC'FROM ROLES'請注意併發查詢可能導致的錯誤。重新創建'AUTO_INCREMENT'不是最好的選擇。 – lad2025

+0

啊......只是我一直在尋找的東西。正確的SQL語法! :) 謝謝! 謝謝你的建議!只是問這是爲了學習的目的! –

+0

@ lad2025,你真的很快:)如果你已經使用評論解決它,如何寫在答案..哈哈,1評論^^ – Japongskie

回答

2

重新創建AUTO_INCREMENT(MySQL)/SEQUENCE/IDENTITY(SQL Server)不是最好的方法,你可能會得到不正確的值與concurnt查詢!

INSERT ... SELECT語法是:

INSERT INTO DROLES(DID, DROLEDESC) 
SELECT MAX(ROLEID)+1, 'NEWROLEDESC' 
FROM ROLES; 

請記住,如果你插入多次DROLESROLES不chaning你會DID列得到相同的值。