question

maddy2119 avatar image
maddy2119 asked

sql query improvement

Hello to all SQL Masters, I need some help with improvement of below sql query.

what I want to do is get the list of users and put only the changed columns, or new entries into the table which might be simple to achieve, but I don't know if below query is efficient. Basically I am doing something like this at the moment.

Note: I have about 5000 rows and 40 columns to update once an hour, do you have any suggestions to do this in more efficient way?


CREATE PROCEDURE sp_upsertADSusers
@accountExpires[bigint],
    @City[nvarchar](max) ,
    @co[nvarchar](max) ,
    @Company[nvarchar](max) ,
    @Created[datetime2](7) ,
    @Department[nvarchar](max) ,
    @Description[nvarchar](max) ,
    @DisplayName[nvarchar](max) ,
    @DistinguishedName[nvarchar](max) ,
    @Division[nvarchar](max) ,
    @Enabled[bit],
    @esocontractstart[nvarchar](max) ,
    @esodirectorate[nvarchar](max) ,
    @esoerpid[nvarchar](max) ,
    @esoerpstatus[nvarchar](max) ,
    @esogroup[nvarchar](max) ,
    @esowikiid[nvarchar](max) ,
    @extensionAttribute1[nvarchar](max) ,
    @extensionAttribute14[nvarchar](max) ,
    @extensionAttribute15[nvarchar](max) ,
    @extensionAttribute2[nvarchar](max) ,
    @extensionAttribute3[nvarchar](max) ,
    @extensionAttribute4[nvarchar](max) ,
    @extensionAttribute5[nvarchar](max) ,
    @extensionAttribute6[nvarchar](max) ,
    @gidNumber[nvarchar](max) ,
    @GivenName[nvarchar](max) ,
    @HomeDirectory[nvarchar](max) ,
    @HomedirRequired[bit],
    @HomeDrive[nvarchar](max) ,
    @homeMDB[nvarchar](max) ,
    @LastBadPasswordAttempt[datetime2](7) ,
    @LastLogonDate[datetime2](7) ,
    @loginShell[nvarchar](max) ,
    @logonCount [int],
    @mail[nvarchar](max) ,
    @mailNickname[nvarchar](max) ,
    @Manager[nvarchar](max) ,
    @Modified[datetime2](7) ,
    @msExchHomeServerName[nvarchar](max) ,
    @msExchWhenMailboxCreated[datetime2](7) ,
    @Office[nvarchar](max) ,
    @OfficePhone[nvarchar](max) ,
    @PasswordExpired[bit],
    @PasswordLastSet[datetime2](7) ,
    @PasswordNeverExpires[bit],
    @PasswordNotRequired[bit],
    @PostalCode[nvarchar](max) ,
    @preferredLanguage[nvarchar](max) ,
    @ProtectedFromAccidentalDeletion[bit],
    @proxyAddresses[nvarchar](max) ,
    @SamAccountName[nvarchar](max) ,
    @SID[nvarchar](max) ,
    @State[nvarchar](max) ,
    @StreetAddress[nvarchar](max) ,
    @Surname[nvarchar](max) ,
    @thumbnailPhoto[nvarchar](max) ,
    @Title[nvarchar](max) ,
    @uid[nvarchar](max) ,
    @uidNumber[nvarchar](max) ,
    @unixHomeDirectory[nvarchar](max) ,
    @UserPrincipalName[nvarchar](max) ,
    @whenCreated[datetime2](7) ,
    @usercertificate[nvarchar](max) ,
    @hascert[bit]
AS
UPDATE [UMT].[dbo].[tblADSusers]
SET [accountExpires]=@accountExpires,
[City]=@City,
[co]=@co,
[Company]=@Company,
[Created]=@Created,
[Department]=@Department,
[Description]=@Description,
[DisplayName]=@DisplayName,
[DistinguishedName]=@DistinguishedName,
[Division]=@Division,
[Enabled]=@Enabled,
[esocontractstart]=@esocontractstart,
[esodirectorate]=@esodirectorate,
[esoerpid]=@esoerpid,
[esoerpstatus]=@esoerpstatus,
[esogroup]=@esogroup,
[esowikiid]=@esowikiid,
[extensionAttribute1]=@extensionAttribute1,
[extensionAttribute14]=@extensionAttribute14,
[extensionAttribute15]=@extensionAttribute15,
[extensionAttribute2]=@extensionAttribute2,
[extensionAttribute3]=@extensionAttribute3,
[extensionAttribute4]=@extensionAttribute4,
[extensionAttribute5]=@extensionAttribute5,
[extensionAttribute6]=@extensionAttribute6,
[gidNumber]=@gidNumber,
[GivenName]=@GivenName,
[HomeDirectory]=@HomeDirectory,
[HomedirRequired]=@HomedirRequired,
[HomeDrive]=@HomeDrive,
[homeMDB]=@homeMDB,
[LastBadPasswordAttempt]=@LastBadPasswordAttempt,
[LastLogonDate]=@LastLogonDate,
[loginShell]=@loginShell,
[logonCount]=@logonCount,
[mail]=@mail,
[mailNickname]=@mailNickname,
[Manager]=@Manager,
[Modified]=@Modified,
[msExchHomeServerName]=@msExchHomeServerName,
[msExchWhenMailboxCreated]=@msExchWhenMailboxCreated,
[Office]=@Office,
[OfficePhone]=@OfficePhone,
[PasswordExpired]=@PasswordExpired,
[PasswordLastSet]=@PasswordLastSet,
[PasswordNeverExpires]=@PasswordNeverExpires,
[PasswordNotRequired]=@PasswordNotRequired,
[PostalCode]=@PostalCode,
[preferredLanguage]=@preferredLanguage,
[ProtectedFromAccidentalDeletion]=@ProtectedFromAccidentalDeletion,
[proxyAddresses]=@proxyAddresses,
[SamAccountName]=@SamAccountName,
[SID]=@SID,
[State]=@State,
[StreetAddress]=@StreetAddress,
[Surname]=@Surname,
[thumbnailPhoto]=@thumbnailPhoto,
[Title]=@Title,
[uid]=@uid,
[uidNumber]=@uidNumber,
[unixHomeDirectory]=@unixHomeDirectory,
[UserPrincipalName]=@UserPrincipalName,
[whenCreated]=@whenCreated,
[userCertificate]=@userCertificate,
[SYNCtimestamp]= getdate()
WHERE[SID] = @SID
AND
[accountExpires]<>@accountExpires or
[City]<>@City or
[co]<>@co or
[Company]<>@Company or
[Created]<>@Created or
[Department]<>@Department or
[Description]<>@Description or
[DisplayName]<>@DisplayName or
[DistinguishedName]<>@DistinguishedName or
[Division]<>@Division or
[Enabled]<>@Enabled or
[esocontractstart]<>@esocontractstart or
[esodirectorate]<>@esodirectorate or
[esoerpid]<>@esoerpid or
[esoerpstatus]<>@esoerpstatus or
[esogroup]<>@esogroup or
[esowikiid]<>@esowikiid or
[extensionAttribute1]<>@extensionAttribute1 or
[extensionAttribute14]<>@extensionAttribute14 or
[extensionAttribute15]<>@extensionAttribute15 or
[extensionAttribute2]<>@extensionAttribute2 or
[extensionAttribute3]<>@extensionAttribute3 or
[extensionAttribute4]<>@extensionAttribute4 or
[extensionAttribute5]<>@extensionAttribute5 or
[extensionAttribute6]<>@extensionAttribute6 or
[gidNumber]<>@gidNumber or
[GivenName]<>@GivenName or
[HomeDirectory]<>@HomeDirectory or
[HomedirRequired]<>@HomedirRequired or
[HomeDrive]<>@HomeDrive or
[homeMDB]<>@homeMDB or
[LastBadPasswordAttempt]<>@LastBadPasswordAttempt or
[LastLogonDate]<>@LastLogonDate or
[loginShell]<>@loginShell or
[logonCount]<>@logonCount or
[mail]<>@mail or
[mailNickname]<>@mailNickname or
[Manager]<>@Manager or
[Modified]<>@Modified or
[msExchHomeServerName]<>@msExchHomeServerName or
[msExchWhenMailboxCreated]<>@msExchWhenMailboxCreated or
[Office]<>@Office or
[OfficePhone]<>@OfficePhone or
[PasswordExpired]<>@PasswordExpired or
[PasswordLastSet]<>@PasswordLastSet or
[PasswordNeverExpires]<>@PasswordNeverExpires or
[PasswordNotRequired]<>@PasswordNotRequired or
[PostalCode]<>@PostalCode or
[preferredLanguage]<>@preferredLanguage or
[ProtectedFromAccidentalDeletion]<>@ProtectedFromAccidentalDeletion or
[proxyAddresses]<>@proxyAddresses or
[SamAccountName]<>@SamAccountName or
[SID]<>@SID or
[State]<>@State or
[StreetAddress]<>@StreetAddress or
[Surname]<>@Surname or
[thumbnailPhoto]<>@thumbnailPhoto or
[Title]<>@Title or
[uid]<>@uid or
[uidNumber]<>@uidNumber or
[unixHomeDirectory]<>@unixHomeDirectory or
[UserPrincipalName]<>@UserPrincipalName or
[whenCreated]<>@whenCreated or
[userCertificate]<>@userCertificate




IF @@ROWCOUNT = 0
BEGIN
   INSERT INTO [UMT].[dbo].[tblADSusers](
   accountExpires,City,co,Company,Created,Department,Description,DisplayName,DistinguishedName,Division,Enabled,esocontractstart,esodirectorate,esoerpid,esoerpstatus,esogroup,esowikiid,extensionAttribute1,extensionAttribute14,extensionAttribute15,extensionAttribute2,extensionAttribute3,extensionAttribute4,extensionAttribute5,extensionAttribute6,gidNumber,GivenName,HomeDirectory,HomedirRequired,HomeDrive,homeMDB,LastBadPasswordAttempt,LastLogonDate,loginShell,logonCount,mail,mailNickname,Manager,Modified,msExchHomeServerName,msExchWhenMailboxCreated,Office,OfficePhone,PasswordExpired,PasswordLastSet,PasswordNeverExpires,PasswordNotRequired,PostalCode,preferredLanguage,ProtectedFromAccidentalDeletion,proxyAddresses,SamAccountName,SID,State,StreetAddress,Surname,thumbnailPhoto,Title,uid,uidNumber,unixHomeDirectory,UserPrincipalName,whenCreated,userCertificate)  Select

@accountExpires,
@City,
@co,
@Company,
@Created,
@Department,
@Description,
@DisplayName,
@DistinguishedName,
@Division,
@Enabled,
@esocontractstart,
@esodirectorate,
@esoerpid,
@esoerpstatus,
@esogroup,
@esowikiid,
@extensionAttribute1,
@extensionAttribute14,
@extensionAttribute15,
@extensionAttribute2,
@extensionAttribute3,
@extensionAttribute4,
@extensionAttribute5,
@extensionAttribute6,
@gidNumber,
@GivenName,
@HomeDirectory,
@HomedirRequired,
@HomeDrive,
@homeMDB,
@LastBadPasswordAttempt,
@LastLogonDate,
@loginShell,
@logonCount,
@mail,
@mailNickname,
@Manager,
@Modified,
@msExchHomeServerName,
@msExchWhenMailboxCreated,
@Office,
@OfficePhone,
@PasswordExpired,
@PasswordLastSet,
@PasswordNeverExpires,
@PasswordNotRequired,
@PostalCode,
@preferredLanguage,
@ProtectedFromAccidentalDeletion,
@proxyAddresses,
@SamAccountName,
@SID,
@State,
@StreetAddress,
@Surname,
@thumbnailPhoto,
@Title,
@uid,
@uidNumber,
@unixHomeDirectory,
@UserPrincipalName,
@whenCreated,
@userCertificate
END
GO
sql query
2 comments
10 |1200

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

maddy2119 avatar image maddy2119 commented ·

could some one please help with my question

0 Likes 0 ·
anthony.green avatar image anthony.green maddy2119 commented ·
Do you need to process each SID individually or could you change this to a set based operation rather than row by row?


Dump the newest AD data into a staging table then process that table as a whole instead of row by row.

0 Likes 0 ·

0 Answers

·

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.