[dba-SQLServer] [AccessD] Cross Posted - Moving a Access Update Query to MS SQL
Borge Hansen
pcs.accessd at gmail.com
Tue Nov 8 08:06:46 CST 2016
Hi all,
MS Access 2010
SQL 2014 Express
I have trouble in moving a simple Access update query to MS SQL Server
syntax
To exemplify: two tables:
tblMerged
UFN (PK, Number / Integer)
MergedData (Memo)
Sample Data:
10,
20,
30
tblSource
ID (PK, Number / Integer)
UFN (FK, Number / Integer)
SourceData (Text, 255)
SelectFlag (Boolean)
Sample Data:
ID UFN SourceData SelectFlag
15 10 10_Text_1 False
14 10 10_Text_2 False
3 10 10_Text_3 False
40 20 20_Text_1 False
39 20 20_Text_2 False
11 20 20_Text_3 False
70 30 30_Text_1 False
68 30 30_Text_2 False
65 30 30_Text_3 False
101 10 10_Text_0 False
102 20 20_Text_0 False
103 30 30_Text_0 False
The Update Query looks like this:
UPDATE tblMerged AS m
INNER JOIN tblSource AS s ON m.UFN = s.UFN
SET m.MergedData =
IIf(Len([m].[MergedData])>0,
[m].[MergedData] & Chr(13) & Chr(10) & [s].[SourceData] & " >>A " &
" >>B " & " >>C ",
[s].[SourceData] & " >>A " & " >>B " & " >>C "),
s.SelectFlag = True
WHERE (((s.SelectFlag)=False));
The resulting data set in tblMerged looks like:
UFN MergedData
10 "10_Text_1 >>A >>B >>C
10_Text_2 >>A >>B >>C
10_Text_3 >>A >>B >>C
10_Text_0 >>A >>B >>C "
20 "20_Text_1 >>A >>B >>C
20_Text_2 >>A >>B >>C
20_Text_3 >>A >>B >>C
20_Text_0 >>A >>B >>C "
30 "30_Text_1 >>A >>B >>C
30_Text_2 >>A >>B >>C
30_Text_3 >>A >>B >>C
30_Text_0 >>A >>B >>C "
So, for each record in tblMerged the query iterates over all inner-joined
records in tblSource and neatly concatenates all SourceData text strings
with a linefeed/linebreak between each text string
AND it updates the second table tblSource as well by setting SelectFlag to
True ....
(As an aside: no matter how I set the sort index of the tblSource.ID - or
use a query as the second object in the update query - a query on tblSource
with a certain sort order on the records - the resulting text strings in
MergedData are always read in and merged in the order the records were
added.I would have expected same order as the PK index order of
tblSource.ID)
The question I am seeking your help with is How do we do this as a stored
procedure in MS SQL : concatenate and merge in the tblMerged and update the
SelectFlag in tblSource using one update query ??
I created the update query in a stored procedure in MS SQL as:
UPDATE dbo.tblMerged
SET [MergedData] =
IIF((LEN(cast([MergedData] as nvarchar(max))))> 0 ,
CONCAT(cast([MergedData] as nvarchar(max)) , char(13), char(10) ,
cs.SourceData, ' >>A ' , ' >>B ' , ' >>C '),
CONCAT([cs].[SourceData] , ' >>A ' , ' >>B ' , ' >>C '))
FROM dbo.tblMerged csm
JOIN tblSource AS cs ON csm.UFN = cs.UFN
;
The update query appears to only act on one record from tblSource
- and we are not able to update the SelectFlag - (hence no WHERE
(((s.SelectFlag)=0)) clause in the MS SQL )
The result of the update query on tblMerged:
UFN MergedData
10 10_Text_2 >>A >>B >>C
20 20_Text_0 >>A >>B >>C
30 30_Text_3 >>A >>B >>C
A simple thing to do in Access SQL/Query - in MS SQL Server ???
Any help appreciated...
/borge
More information about the dba-SQLServer
mailing list