sql server - SQL records with common ID - update all with single user defined function call -


clientinfo table

------------------------------------------------------------ ||clientinfoid |    clientid  | fname   |  mname |  lname || ||1            |      1       |  don    |      |   smith|| ||2            |      1       |  dan    |      |   smith|| ||3            |      1       |  dan    |  g     |   smith|| ||4            |      2       |  john   |  d     |   doe  || ------------------------------------------------------------ 

trying sql call right in sql server. i've written user defined function generates random first/middle/last names working fine. challenge want records same clientid updated result of single call rename function (actually 3 calls = 1 first, middle, , last name).

my attempt below chaning every record in clientinfo different names instead of giving clientid = 1 records same f/m/last names, clientid = 2 same f/m/last names, etc.

desired result:

    ------------------------------------------------------------     ||clientinfoid | clientid  |    fname   | mname | lname   ||     ||1            |   1       |     bill   | x     | brown   ||     ||2            |   1       |     bill   | x     | brown   ||     ||3            |   1       |     bill   | x     | brown   ||     ||4            |   2       |     kate   | q     | ramirez ||     ------------------------------------------------------------ 

actual result:

    ----------------------------------------------------------------     || clientinfoid |clientid   |   fname   | mname  |   lname    ||     || 1            |  1        |     bill  | x      |   brown    ||     || 2            |  1        |     sue   | r      |   henderson||     || 3            |  1        |     phil  | s      |   anders   ||     || 4            |  2        |     kate  | q      |   ramirez  ||     ---------------------------------------------------------------- 

my sql call

update clientinfo set firstname = x.newfirstname     ,middlename = x.newmiddlename     ,lastname = x.newlastname (     select uniqueclientid         ,lastclientinfoid         ,newfirstname         ,newmiddlename         ,newlastname     (         (             select clientid uniqueclientid                 ,max(clientinfoid) lastclientinfoid             clientinfo             group clientid             ) inner join (             select clientinfoid                 ,newfirstname = dbo.fnsamplefnamemnamelname(0, @maxname, '')                 ,newmiddlename = dbo.fnsamplefnamemnamelname(1, @maxname, middlename)                 ,newlastname = dbo.fnsamplefnamemnamelname(2, @maxname, '')             clientinfo             ) b on a.lastclientinfoid = b.clientinfoid         )     ) x clientid = x.uniqueclientid 

solved it. moved creation of names attached each clientid temp table first. joined on clientinfo on temp table pull in new sample names.

select  clientid, newfirstname, newmiddlename, newlastname    #tempsamplenames    (          (             select  clientid,             max(clientinfoid) maxclientinfoid                clientinfo             group    clientid         )         inner join (             select  clientinfoid             ,newfirstname =     dbo.fnsamplefnamemnamelname(0, @maxname, '')             ,newmiddlename =    dbo.fnsamplefnamemnamelname(1, @maxname, middlename)             ,newlastname =  dbo.fnsamplefnamemnamelname(2, @maxname, '')                    clientinfo          ) b on a.maxclientinfoid = b.clientinfoid     )   update  clientinfo set  firstname =     b.newfirstname ,middlename =   b.newmiddlename ,lastname =     b.newlastname clientinfo inner join #tempsamplenames b on a.clientid = b.clientid    drop table #tempsamplenames 

Comments