2009-12-15 43 views
0

我正在使用SQL Server 2008並開發一個處於維護階段的項目。有關在SQL Server中插入SQL的查詢?

我想在主鍵是一個整數但不是身份的表中插入記錄。例如表名是tblFiles,字段是ID, FileName, FileContent

實際上,該表正在使用中,因此我不想在其中進行任何模式更改。我想要插入行後的密鑰,因爲我必須把它放在另一個表中。 Id列中的現有值是不同的整數,意味着不按順序。

所以我想查詢也返回我的Id值。所以我想只插入FileNameFileContent和某種形式的SQL來的人,我可以在我的插入查詢其插入一個唯一的ID,並給我這個ID

+1

ID列是否至少有一個唯一的約束? –

+3

好吧,如果它是主鍵,不會自動暗示唯一性? –

+0

什麼是爲你生成「ID」? – Woot4Moo

回答

4

好嵌入,如果它不是一個IDENTITY場 - 不你已經必須在插入中指定「ID」才能成功?如果是這樣 - 你已經的ID!或者我錯過了什麼? ID是由觸發器或某物決定的?

如果是這樣,嘗試此查詢:

INSERT INTO dbo.tblFiles(FileName, FileContent) 
OUTPUT inserted.ID 
VALUES ('yourfile.name', 'your contents') 

這應該從INSERT查詢返回新插入的ID。

馬克

+0

我認爲他正在尋找一個自動生成的ID而無需更改模式。 – womp

+0

@womp:好的,在這種情況下,我可能會添加一個帶有INT IDENTITY字段的助手錶,並在其中插入一個虛擬行並獲取新的自動生成的ID,然後在'tblFiles'表中使用該表ID –

+0

@Marc;謝謝,我已經發布了我的答案,因爲我發佈了我的最終qyuery,你的答案幫助我建立最終查詢,我正在標記你的答案。 – Azhar

1

您可以創建一個唯一的整數,不那麼優雅,使用

SELECT MAX(ID)+ 1 FROM tblFiles

而只是簡單地從查詢或存儲過程的情況下,返回此也許。否則,請按照marc_s所述說明是否已知。

更新:不得不說,根據要求,而不是這個軟糖,我強烈建議重新努力推動並改變表格,所以這是一個標識列,因爲這是什麼。到目前爲止,所有的答案都是簡單的,特別是我的。

+1

在一個繁忙的多用戶系統中,這確實是一個糟糕的設計 - 你絕對**保證**在沒有時間之後有重複的內容...... –

+0

@marc_s瞭解你的觀點,但需要知道是否這是一個繁忙的系統,或者可能在此插入上有一個表鎖。如果我在他的鞋子裏,我只是推動身份被應用而不是任何這些騙局。認爲我會把這個回答.... – dove

+1

@marc_s順便說一句,如果它是一個主鍵,重複將是不可能的,但誠然,如果沒有鎖定,您將嘗試插入時出現錯誤。 – dove

1

更改列標識規範>標識爲是。

的插入表格後,您可以

Select SCOPE_IDENTITY() 

讓剛加入並在SP返回這個整數。

如果您確實無法編輯數據庫模式,也許可以將另一個表添加到具有兩個名爲ID和CurrentDate的列的數據庫。將ID列作爲標識。在你的代碼中插入這個表首先選擇SCOPE_IDENTITY(),然後使用返回的整數作爲ID插入到你的tblFles表中。

P.S.停止在tbl前加上你的表前綴,這是1999年。:)

+0

pps:shouuld我們開始用「T_」前綴表而不是? ;-) –

+0

來這是如此2001年 –

1

所以我的最終查詢看起來像...

Insert into dbo.tblData (Id, FName, LName) 
output inserted.Id 
values ((SELECT MAX(ID) + 1 FROM dbo.tblData), 'xyz', 'abc') 
0

我們可以在一個整數變量分配MAX(ID)+1,那麼我們就可以插入

Declare @ID int 
Select @ID = ISNULL(MAX(ID),0) + 1 FROM tblFiles 

INSERT INTO tblFiles 
(
    ID, FileName, FileContent 
) 
Select @ID,'FileName','FileContent' 

這種插入是直接的,

INSERT INTO tblFiles 
(
    ID, FileName, FileContent 
) 
Select (Select ISNULL(MAX(ID),0) + 1 FROM tblFiles),'FileName','FileContent' 

在這裏,我們不得不使用ISNULL條件,因爲表中沒有數據,那麼它將返回Null。所以ISNULL(MAX(ID),0)+ 1這個條件將給出數據爲空然後0 + 1 = 1。

謝謝