我有一個數據庫設置爲存儲從我創建看起來像這樣的每一個Web表單中的所有輸入:如何使用基於集合的SQL我的查詢
(FormData)
----------------------
(PK) Id int not null,
(FK) FormFieldId int not null,
(FK) FormId int not null,
Data varchar(max) null,
DateSubmitted datatime not null,
(FK) SubmissionId uniqueidentifier not null
我需要查詢這個數據庫選擇特定於Web表單的字段並將其存儲在名爲TSERequests的單獨表中。由於FormFieldIds是特定於表單的,因此不需要擔心FormId。要選擇所有我需要的,我用一個簡單的查詢數據:
SELECT Data, FormFieldId,
DENSE_RANK() OVER (ORDER BY DateSubmitted desc) AS RequestRanking
FROM FormData
WHERE FormFieldId IN (191, 192, 193, 194, 195, 196, 197, 198, 205, 208, 213,
216, 217, 218, 219, 220, 242, 243, 244, 269)
該查詢給了我這樣的結果:
(Data) | (FormFieldId) | (RequestRanking)
-------------+----------------------+--------------------
TestData1 | 191 | 1
TestData2 | 192 | 1
TestData3 | 193 | 1
... | ... | ...
TestData20 | 269 | 1
TestData21 | 191 | 2
TestData22 | 192 | 2
TestData23 | 193 | 2
的RequestRanking增量爲它找到的每一個新的請求。我知道我可以使用遊標或while循環循環遍歷每個RequestRanking,並將每個數據單獨設置到新表中的相應字段,但我們都知道這需要多長時間。
我還是很新的SQL,我需要一些幫助。我想知道是否有一種簡單而有效的方式來使用基於集合的SQL而不是過程化的SQL來執行此操作。
編輯: 要清楚,這是TSERequests樣子(我試圖插入到表)
(TSERequests)
-----------------------------
(PK) RequestId int not null,
DateCreated date not null,
Name varchar(100) not null,
StreetAddress varchar(100) null,
City varchar(100) null,
State int null,
ZipCode varchar(10) null,
PhoneNumber varchar(15) null,
EmailAddress varchar(100) null,
RequestStartDate date not null,
RequestEndDate date not null,
RequestStatus int null
此表中的每一列都有一個對應的FormFieldId在FORMDATA表。例如,FormData表中的FormFieldId(191)對應於TSERequests表中的列(DateCreated)。
我不清楚你在問什麼。根據你提供的查詢,你需要一個'INSERT'或'UPDATE'到'FormData'嗎?如果是這樣,你可以寫一個 - 既支持'FROM'和連接。 (但這將是一個自聯接,因此使用公用表表達式更加方便。) –
我需要對TSERequests表進行INSERT。 FormData中的每個FormFieldId在TSERequests中都有相應的列。 –
我將編輯我的帖子以顯示我的其他數據庫的外觀。 –