Sql-Server
為表中的每個使用者 ID 生成 CSV 電子郵件
大家好,我有一個獨特的要求,我需要為每個使用者 ID 生成一個包含數據的 .csv 文件。我從 select 語句返回的結果集是
userID numOfSales saleDate meetMark
ec12 4 2017-01-02 否
ec12 3 2017-01-03 否
ss33 5 2017-01-10 否
因此,我想生成 2 個 .csv 文件,一個用於 ec12,一個用於 ss33,並將這些文件通過電子郵件發送到電子郵件地址。
下面是我的範例 DDL 和返回上述內容的查詢,如何
for each
在 SQL Server 中為上述 select 語句中的每個使用者 ID 生成一個 .csv 文件?Create Table #bluebell ( userID varchar(100) ,numOfSales int ,saleDate date ,meetMark varchar(10) ) Insert Into #bluebell (userID, numOfSales, saleDate, meetMark) Values ('ec12', '22', '20170101', 'Yes'),('ec12', '4', '20170102', 'No'),('ec12', '3', '20170103', 'No') ,('er11', '30', '20170101', 'Yes'), ('er11', '22', '20170103', 'Yes'), ('er11', '33', '20170109', 'Yes') ,('ss33', '40', '20170101', 'Yes'), ('ss33', '5', '20170110', 'No') Select * FROM #bluebell where meetMark = 'No' DROP TABLE #bluebell
以下將執行類似於FOREACH循環的操作:
CREATE TABLE #TableOne ( UserId VARCHAR(5), SalesNo INT, DateSale DATE, MarkMet BIT); INSERT INTO #TableOne ( UserId, SalesNo, DateSale, MarkMet) VALUES ('ec12', 22, '2017-01-01', 1), ('ec12', 4, '2017-01-02', 0), ('ec12', 3, '2017-01-03', 0), ('er11', 30, '2017-01-01', 1), ('er11', 22, '2017-01-02', 1), ('er11', 33, '2017-01-03', 1), ('ss33', 40, '2017-01-02', 1), ('ss33', 5, '2017-01-10', 0); DECLARE @RowCount INT = (SELECT DISTINCT COUNT(*) UserId FROM #TableOne); DECLARE @i INT = 1; DECLARE @UserId VARCHAR(5); DECLARE @Temp TABLE (id INT, userid VARCHAR(5)); INSERT INTO @Temp (id, userid) SELECT ROW_NUMBER() OVER(ORDER BY t.UserId) AS Id ,t.UserId FROM ( SELECT DISTINCT UserId FROM #TableOne) t; WHILE (@i <= @RowCount) BEGIN SET @UserId = (SELECT t.userid FROM @Temp t WHERE t.id = @i) /************************************************/ /* Build the logic to be iterated per each user */ /* (generate CSV, Send Mail, etc) */ /* */ /* eg. SELECT * */ /* FROM #TableOne */ /* WHERE UserId = @UserId */ /* */ /************************************************/ SET @i = @i + 1; END
首先,它將創建一個臨時表來儲存每個唯一的 UserId,並根據 為它們分配一個偽 uid
ROW_COUNT
,然後它將遍歷這個新創建的表以逐個獲取 UserId,此時您將能夠執行每個記錄/使用者 ID 的操作。