Solved

sql server update query

Posted on 2016-08-09
23
47 Views
Last Modified: 2016-08-09
With Guy and stefans help I have a query that returns ConcatWordText I would like to amend it so that StrShort field in the tblwords(w)
is updated with that result.

use Dictionary
go

WITH    Filtered
          AS ( SELECT   W.Word, w.WordPosition, w.clientcode, w.ClientCodeWordPosition, w.StrShort
                    
               FROM     tblwords w
                        LEFT JOIN tblwordtags wt ON W.clientcodeWordPosition = wt.clientcodeWordPosition
               WHERE    wt.word IS NULL and w.ClientCodeWordPosition like '95052350%'
			   
             )
    SELECT  o.ClientCodeWordPosition, o.clientcode, o.StrShort,
            RTRIM(( SELECT  I.Word + ' '
                    FROM    Filtered I
                    WHERE   I.clientcode = O.clientcode
				 order by i.WordPosition
                  FOR
                    XML PATH('')
                  )) AS ConcatWordText, o.WordPosition
    FROM    Filtered O
   order by o.WordPosition

Open in new window

0
Comment
Question by:PeterBaileyUk
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 14
  • 7
  • 2
23 Comments
 
LVL 50

Accepted Solution

by:
Vitor Montalvão earned 250 total points
ID: 41748594
I'm not into your database model but I guess you want something like:
use Dictionary
go

WITH Filtered
AS ( SELECT W.Word, w.WordPosition, w.clientcode, w.ClientCodeWordPosition, w.StrShort
    FROM tblwords w
		LEFT JOIN tblwordtags wt ON W.clientcodeWordPosition = wt.clientcodeWordPosition
    WHERE wt.word IS NULL and w.ClientCodeWordPosition like '95052350%')

UPDATE tblwords
SET StrShort = RTRIM(SELECT I.Word + ' '
			FROM Filtered I
			WHERE I.clientcode = tblwords.clientcode
			ORDER BY i.WordPosition
			FOR XML PATH(''))

Open in new window

NOTE: Before running this code in a Production environment please run it in a test database to validate the results are the expected ones.
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 41748595
0
 

Author Comment

by:PeterBaileyUk
ID: 41748600
yes it didnt seem right to put it in the same question as the query was returning the rows.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:PeterBaileyUk
ID: 41748617
its complaining in the last select by the rtrim all names are red, i suspect its bracketing in there

use Dictionary
go

WITH    Filtered
          AS ( SELECT   W.Word, w.WordPosition, w.clientcode, w.ClientCodeWordPosition, w.StrShort
                    
               FROM     tblwords w
                        LEFT JOIN tblwordtags wt ON W.clientcodeWordPosition = wt.clientcodeWordPosition
               WHERE    wt.word IS NULL and w.ClientCodeWordPosition like '95052350%'
			   
             )

			 update TblWords


   SET StrShort = RTRIM (SELECT  I.Word + ' '
                    FROM    Filtered I
                    WHERE   I.clientcode = O.clientcode
				 order by i.WordPosition
                  FOR
                    XML PATH('')
                  )) AS ConcatWordText, o.WordPosition
    FROM    Filtered O
   order by o.WordPosition);

Open in new window

0
 

Author Comment

by:PeterBaileyUk
ID: 41748628
i amended slightly to clarify the output
ee.JPG
0
 
LVL 50

Expert Comment

by:Vitor Montalvão
ID: 41748631
Did you try the update command?
0
 

Author Comment

by:PeterBaileyUk
ID: 41748633
yes it fails on syntax but cannot see why as mentioned ID: 41748617
0
 

Author Comment

by:PeterBaileyUk
ID: 41748636
the select from and where and some brackets are underlined:

SET StrShort = RTRIM (SELECT  I.Word + ' '
                    FROM    Filtered I
                    WHERE   I.clientcode = O.clientcode
                         order by i.WordPosition
                  FOR
                    XML PATH('')
                  )) AS ConcatWordText, o.WordPosition
    FROM    Filtered O
   order by o.WordPosition);
0
 

Author Comment

by:PeterBaileyUk
ID: 41748637
like this
ee.JPG
0
 
LVL 50

Expert Comment

by:Vitor Montalvão
ID: 41748645
That's not my code. You added the last 3 lines. They aren't intended to be there.
0
 

Author Comment

by:PeterBaileyUk
ID: 41748655
aha ok I misunderstood.
0
 

Author Comment

by:PeterBaileyUk
ID: 41748660
here is the correct snapshot of the screen
ee.JPG
0
 
LVL 50

Expert Comment

by:Vitor Montalvão
ID: 41748664
Did you run it?
Don't forget to test in a non-production environment.
0
 

Author Comment

by:PeterBaileyUk
ID: 41748673
it wont run it says:
Msg 156, Level 15, State 1, Line 11
Incorrect syntax near the keyword 'SELECT'.
Msg 102, Level 15, State 1, Line 15
Incorrect syntax near ')'.
0
 
LVL 50

Expert Comment

by:Vitor Montalvão
ID: 41748687
Ok. I didn't have opportunity to test it.
Can you add SELECT keyword before the RTRIM?
0
 

Author Comment

by:PeterBaileyUk
ID: 41748692
Ive changed to this but its now :
UPDATE tblwords
SET StrShort = SELECT (RTRIM I.Word + ' '

Msg 156, Level 15, State 1, Line 11
Incorrect syntax near the keyword 'SELECT'.
Msg 102, Level 15, State 1, Line 11
Incorrect syntax near 'I'.
0
 

Author Comment

by:PeterBaileyUk
ID: 41748694
and tried this:

UPDATE tblwords
SET StrShort = SELECT (RTRIM (I.Word + ' ')
                  FROM Filtered I
                  WHERE I.clientcode = tblwords.clientcode
                  ORDER BY i.WordPosition
                  FOR XML PATH(''))
0
 
LVL 50

Expert Comment

by:Vitor Montalvão
ID: 41748698
Don't add parenthesis:
UPDATE tblwords
 SET StrShort = SELECT RTRIM I.Word + '
...
0
 
LVL 143

Assisted Solution

by:Guy Hengel [angelIII / a3]
Guy Hengel [angelIII / a3] earned 250 total points
ID: 41748718
there need to be brackets, actually
either it's

set field = RTRIM((SELECT ...))
or
set field = ( SELECT RTRIM( ...) ... )
0
 

Author Comment

by:PeterBaileyUk
ID: 41748735
its looking better, nothing underlined now, it says;

Msg 1033, Level 15, State 1, Line 14
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.

I suspect its the last error now
use Dictionary
go

WITH Filtered
AS ( SELECT W.Word, w.WordPosition, w.clientcode, w.ClientCodeWordPosition, w.StrShort
    FROM tblwords w
		LEFT JOIN tblwordtags wt ON W.clientcodeWordPosition = wt.clientcodeWordPosition
    WHERE wt.word IS NULL and w.ClientCodeWordPosition like '95052350%')

UPDATE tblwords
SET StrShort = RTRIM((SELECT I.Word + ' '
			FROM Filtered I
			WHERE I.clientcode = tblwords.clientcode
			ORDER BY i.WordPosition))
			FOR XML PATH('')

Open in new window

0
 

Author Comment

by:PeterBaileyUk
ID: 41748746
I did this and i believe, but i will check again that its worked ok.

UPDATE tblwords
SET StrShort = RTRIM((SELECT I.Word + ' '
			FROM Filtered I
			WHERE I.clientcode = tblwords.clientcode
			ORDER BY i.WordPosition

			FOR XML PATH('')))

Open in new window

0
 

Author Closing Comment

by:PeterBaileyUk
ID: 41748762
Thank you to you both.
0
 
LVL 50

Expert Comment

by:Vitor Montalvão
ID: 41748837
Oh, missed a pair of parenthesis.
Glad that you sorted it out.
Cheers
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

A Stored Procedure in Microsoft SQL Server is a powerful feature that it can be used to execute the Data Manipulation Language (DML) or Data Definition Language (DDL). Depending on business requirements, a single Stored Procedure can return differe…
Recently we ran in to an issue while running some SQL jobs where we were trying to process the cubes.  We got an error saying failure stating 'NT SERVICE\SQLSERVERAGENT does not have access to Analysis Services. So this is a way to automate that wit…
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question