我设置了一个数据库来存储来自我创建的每个 Web 表单的所有输入,如下所示:
(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
此表中的每一列在 FormData 表中都有一个对应的 FormFieldId。例如,FormData 表中的 FormFieldId (191) 对应于 TSERequests 表中的列 (DateCreated)。