This is a migrated thread and some comments may be shown as answers.

[Solved] Upgrading TeamPulse to Q3 2010 Problem

3 Answers 171 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Derek
Top achievements
Rank 1
Derek asked on 24 Nov 2010, 07:11 PM
Hi,
We're encountering an error while upgrading our existing TeamPulse (community edition) installation.  We're trying to upgrade to the latest Q3 2010 however the installer fails each time.

Presumably upgrading an existing community edition installation is supported? Assuming we get this to eventually work will it upgrade our existing project database or do we have to start all over again?

Note that after the failed upgrade we no longer have any edition of TeamPulse now working! (We did take a backup of the TeamPulse database prior to the upgrade thankfully!)

Perhaps you can figure out the problem from the installation log files appended below.

Any help would be much appreciated.

Regards

Derek

=== Verbose logging started: 24/11/2010  16:54:25  Build type: SHIP UNICODE 4.05.6002.00  Calling process: C:\Windows\system32\msiexec.exe ===
MSI (c) (1C:88) [16:54:25:302]: Resetting cached policy values
MSI (c) (1C:88) [16:54:25:302]: Machine policy value 'Debug' is 0
MSI (c) (1C:88) [16:54:25:302]: ******* RunEngine:
           ******* Product: Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
           ******* Action:
           ******* CommandLine: **********
MSI (c) (1C:88) [16:54:25:314]: Machine policy value 'DisableUserInstalls' is 0
MSI (c) (1C:88) [16:54:25:321]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 3: 2
MSI (c) (1C:88) [16:54:25:350]: SOFTWARE RESTRICTION POLICY: Verifying package --> 'C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi' against software restriction policy
MSI (c) (1C:88) [16:54:25:351]: SOFTWARE RESTRICTION POLICY: C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi has a digital signature
MSI (c) (1C:88) [16:54:25:507]: SOFTWARE RESTRICTION POLICY: C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi is permitted to run at the 'unrestricted' authorization level.
MSI (c) (1C:88) [16:54:25:512]: Cloaking enabled.
MSI (c) (1C:88) [16:54:25:512]: Attempting to enable all disabled privileges before calling Install on Server
MSI (c) (1C:88) [16:54:25:519]: End dialog not enabled
MSI (c) (1C:88) [16:54:25:519]: Original package ==> C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
MSI (c) (1C:88) [16:54:25:519]: Package we're running from ==> C:\Users\ADMINI~1\AppData\Local\Temp\1\bcc43.msi
MSI (c) (1C:88) [16:54:25:522]: APPCOMPAT: looking for appcompat database entry with ProductCode '{02E84302-F860-462A-BF16-FE2D92A4A06A}'.
MSI (c) (1C:88) [16:54:25:522]: APPCOMPAT: no matching ProductCode found in database.
MSI (c) (1C:88) [16:54:25:525]: MSCOREE not loaded loading copy from system32
MSI (c) (1C:88) [16:54:25:528]: Machine policy value 'TransformsSecure' is 1
MSI (c) (1C:88) [16:54:25:528]: Machine policy value 'DisablePatch' is 0
MSI (c) (1C:88) [16:54:25:528]: Machine policy value 'AllowLockdownPatch' is 0
MSI (c) (1C:88) [16:54:25:528]: Machine policy value 'DisableLUAPatching' is 0
MSI (c) (1C:88) [16:54:25:528]: Machine policy value 'DisableFlyWeightPatching' is 0
MSI (c) (1C:88) [16:54:25:528]: Enabling baseline caching for this transaction since all active patches are MSI 3.0 style MSPs or at least one MSI 3.0 minor update patch is active
MSI (c) (1C:88) [16:54:25:528]: APPCOMPAT: looking for appcompat database entry with ProductCode '{02E84302-F860-462A-BF16-FE2D92A4A06A}'.
MSI (c) (1C:88) [16:54:25:528]: APPCOMPAT: no matching ProductCode found in database.
MSI (c) (1C:88) [16:54:25:528]: Transforms are not secure.
MSI (c) (1C:88) [16:54:25:529]: PROPERTY CHANGE: Adding MsiLogFileLocation property. Its value is 'C:\teampulselog.txt'.
MSI (c) (1C:88) [16:54:25:529]: Command Line: CURRENTDIRECTORY=C:\ CLIENTUILEVEL=0 CLIENTPROCESSID=3612
MSI (c) (1C:88) [16:54:25:529]: PROPERTY CHANGE: Adding PackageCode property. Its value is '{99765709-1FEF-4648-A08B-9B16F74CFA8D}'.
MSI (c) (1C:88) [16:54:25:529]: Product Code passed to Engine.Initialize:           ''
MSI (c) (1C:88) [16:54:25:529]: Product Code from property table before transforms: '{02E84302-F860-462A-BF16-FE2D92A4A06A}'
MSI (c) (1C:88) [16:54:25:529]: Product Code from property table after transforms:  '{02E84302-F860-462A-BF16-FE2D92A4A06A}'
MSI (c) (1C:88) [16:54:25:529]: Product not registered: beginning first-time install
MSI (c) (1C:88) [16:54:25:529]: PROPERTY CHANGE: Adding ProductState property. Its value is '-1'.
MSI (c) (1C:88) [16:54:25:529]: Entering CMsiConfigurationManager::SetLastUsedSource.
MSI (c) (1C:88) [16:54:25:529]: User policy value 'SearchOrder' is 'nmu'
MSI (c) (1C:88) [16:54:25:529]: Adding new sources is allowed.
MSI (c) (1C:88) [16:54:25:529]: PROPERTY CHANGE: Adding PackagecodeChanging property. Its value is '1'.
MSI (c) (1C:88) [16:54:25:529]: Package name extracted from package path: 'Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'
MSI (c) (1C:88) [16:54:25:529]: Package to be registered: 'Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'
MSI (c) (1C:88) [16:54:25:530]: Note: 1: 2262 2: AdminProperties 3: -2147287038
MSI (c) (1C:88) [16:54:25:530]: Machine policy value 'DisableMsi' is 1
MSI (c) (1C:88) [16:54:25:530]: Machine policy value 'AlwaysInstallElevated' is 0
MSI (c) (1C:88) [16:54:25:530]: User policy value 'AlwaysInstallElevated' is 0
MSI (c) (1C:88) [16:54:25:530]: Running product '{02E84302-F860-462A-BF16-FE2D92A4A06A}' with user privileges: It's not assigned.
MSI (c) (1C:88) [16:54:25:530]: PROPERTY CHANGE: Adding CURRENTDIRECTORY property. Its value is 'C:\'.
MSI (c) (1C:88) [16:54:25:530]: PROPERTY CHANGE: Adding CLIENTUILEVEL property. Its value is '0'.
MSI (c) (1C:88) [16:54:25:530]: PROPERTY CHANGE: Adding CLIENTPROCESSID property. Its value is '3612'.
MSI (c) (1C:88) [16:54:25:530]: TRANSFORMS property is now:
MSI (c) (1C:88) [16:54:25:530]: PROPERTY CHANGE: Adding VersionDatabase property. Its value is '200'.
MSI (c) (1C:88) [16:54:25:530]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming
MSI (c) (1C:88) [16:54:25:531]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Favorites
MSI (c) (1C:88) [16:54:25:531]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts
MSI (c) (1C:88) [16:54:25:531]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Documents
MSI (c) (1C:88) [16:54:25:531]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
MSI (c) (1C:88) [16:54:25:531]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent
MSI (c) (1C:88) [16:54:25:531]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo
MSI (c) (1C:88) [16:54:25:531]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates
MSI (c) (1C:88) [16:54:25:532]: SHELL32::SHGetFolderPath returned: C:\ProgramData
MSI (c) (1C:88) [16:54:25:532]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Local
MSI (c) (1C:88) [16:54:25:532]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Pictures
MSI (c) (1C:88) [16:54:25:532]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
MSI (c) (1C:88) [16:54:25:532]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
MSI (c) (1C:88) [16:54:25:532]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
MSI (c) (1C:88) [16:54:25:533]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu
MSI (c) (1C:88) [16:54:25:533]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Desktop
MSI (c) (1C:88) [16:54:25:533]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
MSI (c) (1C:88) [16:54:25:533]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
MSI (c) (1C:88) [16:54:25:533]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs
MSI (c) (1C:88) [16:54:25:533]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu
MSI (c) (1C:88) [16:54:25:533]: SHELL32::SHGetFolderPath returned: C:\Users\Public\Desktop
MSI (c) (1C:88) [16:54:25:533]: SHELL32::SHGetFolderPath returned: C:\Windows\Fonts
MSI (c) (1C:88) [16:54:25:534]: Note: 1: 2898 2: MS Sans Serif 3: MS Sans Serif 4: 0 5: 16
MSI (c) (1C:88) [16:54:25:538]: MSI_LUA: Setting AdminUser property to 1 because this is the client or the user has already permitted elevation
MSI (c) (1C:88) [16:54:25:538]: MSI_LUA: Setting MsiRunningElevated property to 1 because the install is already running elevated.
MSI (c) (1C:88) [16:54:25:538]: PROPERTY CHANGE: Adding MsiRunningElevated property. Its value is '1'.
MSI (c) (1C:88) [16:54:25:538]: PROPERTY CHANGE: Adding Privileged property. Its value is '1'.
MSI (c) (1C:88) [16:54:25:538]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\MS Setup (ACME)\User Info 3: 2
MSI (c) (1C:88) [16:54:25:538]: PROPERTY CHANGE: Adding USERNAME property. Its value is 'Windows User'.
MSI (c) (1C:88) [16:54:25:538]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\MS Setup (ACME)\User Info 3: 2
MSI (c) (1C:88) [16:54:25:538]: PROPERTY CHANGE: Adding DATABASE property. Its value is 'C:\Users\ADMINI~1\AppData\Local\Temp\1\bcc43.msi'.
MSI (c) (1C:88) [16:54:25:538]: PROPERTY CHANGE: Adding OriginalDatabase property. Its value is 'C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'.
MSI (c) (1C:88) [16:54:25:538]: Machine policy value 'MsiDisableEmbeddedUI' is 0
MSI (c) (1C:88) [16:54:25:538]: PROPERTY CHANGE: Adding SourceDir property. Its value is 'C:\'.
MSI (c) (1C:88) [16:54:25:538]: PROPERTY CHANGE: Adding SOURCEDIR property. Its value is 'C:\'.
MSI (c) (1C:B0) [16:54:25:539]: PROPERTY CHANGE: Adding VersionHandler property. Its value is '4.05'.
=== Logging started: 24/11/2010  16:54:25 ===
MSI (c) (1C:88) [16:54:25:544]: Note: 1: 2205 2:  3: PatchPackage
MSI (c) (1C:88) [16:54:25:544]: Machine policy value 'DisableRollback' is 0
MSI (c) (1C:88) [16:54:25:544]: User policy value 'DisableRollback' is 0
MSI (c) (1C:88) [16:54:25:544]: PROPERTY CHANGE: Adding UILevel property. Its value is '5'.
MSI (c) (1C:88) [16:54:25:545]: PROPERTY CHANGE: Adding ACTION property. Its value is 'INSTALL'.
MSI (c) (1C:88) [16:54:25:545]: Doing action: INSTALL
Action 16:54:25: INSTALL.
Action start 16:54:25: INSTALL.
MSI (c) (1C:88) [16:54:25:546]: UI Sequence table 'InstallUISequence' is present and populated.
MSI (c) (1C:88) [16:54:25:546]: Running UISequence
MSI (c) (1C:88) [16:54:25:546]: PROPERTY CHANGE: Adding EXECUTEACTION property. Its value is 'INSTALL'.
MSI (c) (1C:88) [16:54:25:546]: Doing action: FindRelatedProducts
Action 16:54:25: FindRelatedProducts. Searching for related applications
Action start 16:54:25: FindRelatedProducts.
Action ended 16:54:25: FindRelatedProducts. Return value 1.
MSI (c) (1C:88) [16:54:25:547]: Doing action: PrepareDlgTelerik
Action 16:54:25: PrepareDlgTelerik.
Action start 16:54:25: PrepareDlgTelerik.
Info 2898. For Telerik_Font_SubTitle textstyle, the system created a 'Arial' font, in 1 character set, of 14 pixels height.
Info 2898. For Telerik_Font_MidSizeText textstyle, the system created a 'Arial' font, in 1 character set, of 15 pixels height.
Info 2898. For Telerik_Font_LargeText textstyle, the system created a 'Arial' font, in 1 character set, of 27 pixels height.
Info 2898. For Telerik_Font_VersionInfo textstyle, the system created a 'Microsoft Sans Serif' font, in 1 character set, of 12 pixels height.
Action 16:54:25: PrepareDlgTelerik. Dialog created
Action ended 16:54:25: PrepareDlgTelerik. Return value 1.
MSI (c) (1C:88) [16:54:25:589]: Doing action: SetCOMPANYNAME
Action 16:54:25: SetCOMPANYNAME.
Action start 16:54:25: SetCOMPANYNAME.
MSI (c) (1C:88) [16:54:25:591]: PROPERTY CHANGE: Adding COMPANYNAME property. Its value is 'TeamPulse'.
Action ended 16:54:25: SetCOMPANYNAME. Return value 1.
MSI (c) (1C:88) [16:54:25:591]: Doing action: AppSearch
Action 16:54:25: AppSearch. Searching for installed applications
Action start 16:54:25: AppSearch.
AppSearch: Property: ASPNET, Signature: ASPNETS
MSI (c) (1C:88) [16:54:25:594]: PROPERTY CHANGE: Adding ASPNET property. Its value is '#1'.
AppSearch: Property: ASPNET64, Signature: ASPNETS64
MSI (c) (1C:88) [16:54:25:595]: PROPERTY CHANGE: Adding ASPNET64 property. Its value is '#1'.
AppSearch: Property: IIS7ADMINSVC, Signature: IIS7ADMINSVCS
MSI (c) (1C:88) [16:54:25:596]: PROPERTY CHANGE: Adding IIS7ADMINSVC property. Its value is '#1'.
AppSearch: Property: IIS7ADMINSVC64, Signature: IIS7ADMINSVCS64
MSI (c) (1C:88) [16:54:25:597]: PROPERTY CHANGE: Adding IIS7ADMINSVC64 property. Its value is '#1'.
AppSearch: Property: IIS7MGMTCONSOLE, Signature: IIS7MGMTCONSOLES
MSI (c) (1C:88) [16:54:25:598]: PROPERTY CHANGE: Adding IIS7MGMTCONSOLE property. Its value is '#1'.
AppSearch: Property: IIS7MGMTCONSOLE64, Signature: IIS7MGMTCONSOLES64
MSI (c) (1C:88) [16:54:25:599]: PROPERTY CHANGE: Adding IIS7MGMTCONSOLE64 property. Its value is '#1'.
AppSearch: Property: IIS7WINDOWSAUTH, Signature: IIS7WINDOWSAUTH
MSI (c) (1C:88) [16:54:25:600]: PROPERTY CHANGE: Adding IIS7WINDOWSAUTH property. Its value is '#1'.
AppSearch: Property: IIS7WINDOWSAUTH64, Signature: IIS7WINDOWSAUTH64
MSI (c) (1C:88) [16:54:25:602]: PROPERTY CHANGE: Adding IIS7WINDOWSAUTH64 property. Its value is '#1'.
AppSearch: Property: TEAMEXPLORER2010, Signature: TEAMEXPLORER2010
MSI (c) (1C:88) [16:54:25:603]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\InstalledProducts\Team Explorer 3: 2
AppSearch: Property: TEAMEXPLORER2010_64, Signature: TEAMEXPLORER2010_64
MSI (c) (1C:88) [16:54:25:604]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\InstalledProducts\Team Explorer 3: 2
AppSearch: Property: DEFAULTDOCUMENT, Signature: defDoc
MSI (c) (1C:88) [16:54:25:605]: PROPERTY CHANGE: Adding DEFAULTDOCUMENT property. Its value is '#1'.
AppSearch: Property: DEFAULTDOCUMENT64, Signature: defDoc64
MSI (c) (1C:88) [16:54:25:607]: PROPERTY CHANGE: Adding DEFAULTDOCUMENT64 property. Its value is '#1'.
AppSearch: Property: HTTPREDIRECTION, Signature: httpRed
MSI (c) (1C:88) [16:54:25:608]: PROPERTY CHANGE: Adding HTTPREDIRECTION property. Its value is '#1'.
AppSearch: Property: HTTPREDIRECTION64, Signature: httpRed64
MSI (c) (1C:88) [16:54:25:609]: PROPERTY CHANGE: Adding HTTPREDIRECTION64 property. Its value is '#1'.
AppSearch: Property: STATICCONTENT, Signature: staticCon
MSI (c) (1C:88) [16:54:25:610]: PROPERTY CHANGE: Adding STATICCONTENT property. Its value is '#1'.
AppSearch: Property: STATICCONTENT64, Signature: staticCon64
MSI (c) (1C:88) [16:54:25:611]: PROPERTY CHANGE: Adding STATICCONTENT64 property. Its value is '#1'.
AppSearch: Property: NETFRAMEWORK40, Signature: Net40Key
MSI (c) (1C:88) [16:54:25:612]: PROPERTY CHANGE: Adding NETFRAMEWORK40 property. Its value is 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\'.
AppSearch: Property: INSTALLLOCATION, Signature: InstallLocationRegistry
MSI (c) (1C:88) [16:54:25:613]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Telerik\Telerik TeamPulse 3: 2
AppSearch: Property: NETSH, Signature: Netshexe
MSI (c) (1C:88) [16:54:25:615]: Note: 1: 1322 2: 
MSI (c) (1C:88) [16:54:25:615]: Note: 1: 1322 2: 
MSI (c) (1C:88) [16:54:25:615]: PROPERTY CHANGE: Adding NETSH property. Its value is 'C:\Windows\system32\Netsh.exe'.
AppSearch: Property: IISMAJORVERSION, Signature: IIsMajorVersionSearch
MSI (c) (1C:88) [16:54:25:616]: PROPERTY CHANGE: Adding IISMAJORVERSION property. Its value is '#7'.
AppSearch: Property: IISMINORVERSION, Signature: IIsMinorVersionSearch
MSI (c) (1C:88) [16:54:25:617]: PROPERTY CHANGE: Adding IISMINORVERSION property. Its value is '#0'.
Action ended 16:54:25: AppSearch. Return value 1.
MSI (c) (1C:88) [16:54:25:618]: Doing action: ValidateProductID
Action 16:54:25: ValidateProductID.
Action start 16:54:25: ValidateProductID.
Action ended 16:54:25: ValidateProductID. Return value 1.
MSI (c) (1C:88) [16:54:25:620]: Doing action: CostInitialize
Action 16:54:25: CostInitialize. Computing space requirements
Action start 16:54:25: CostInitialize.
MSI (c) (1C:88) [16:54:25:621]: Machine policy value 'MaxPatchCacheSize' is 10
MSI (c) (1C:88) [16:54:25:621]: Baseline: Sorting baselines for {02E84302-F860-462A-BF16-FE2D92A4A06A}.
MSI (c) (1C:88) [16:54:25:621]: Baseline: New baseline 103.11.17 from transaction.
MSI (c) (1C:88) [16:54:25:621]: Baseline: Sorted order Native: Order 0.
MSI (c) (1C:88) [16:54:25:622]: Baseline Data Table:
MSI (c) (1C:88) [16:54:25:622]: ProductCode: {02E84302-F860-462A-BF16-FE2D92A4A06A} Version: 103.11.17 Attributes: 0 PatchId: Native BaselineId: -2147483648 Order: 0
MSI (c) (1C:88) [16:54:25:622]: Baseline File Table:
MSI (c) (1C:88) [16:54:25:622]: PROPERTY CHANGE: Adding ROOTDRIVE property. Its value is 'C:\'.
MSI (c) (1C:88) [16:54:25:623]: PROPERTY CHANGE: Adding CostingComplete property. Its value is '0'.
Action ended 16:54:25: CostInitialize. Return value 1.
MSI (c) (1C:88) [16:54:25:623]: Doing action: FileCost
Action 16:54:25: FileCost. Computing space requirements
Action start 16:54:25: FileCost.
MSI (c) (1C:88) [16:54:25:625]: Note: 1: 2205 2:  3: MsiAssembly
MSI (c) (1C:88) [16:54:25:625]: Note: 1: 2205 2:  3: Class
MSI (c) (1C:88) [16:54:25:625]: Note: 1: 2205 2:  3: Extension
MSI (c) (1C:88) [16:54:25:625]: Note: 1: 2205 2:  3: TypeLib
Action ended 16:54:25: FileCost. Return value 1.
MSI (c) (1C:88) [16:54:25:625]: Doing action: CostFinalize
Action 16:54:25: CostFinalize. Computing space requirements
Action start 16:54:25: CostFinalize.
MSI (c) (1C:88) [16:54:25:627]: PROPERTY CHANGE: Adding OutOfDiskSpace property. Its value is '0'.
MSI (c) (1C:88) [16:54:25:627]: PROPERTY CHANGE: Adding OutOfNoRbDiskSpace property. Its value is '0'.
MSI (c) (1C:88) [16:54:25:627]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceAvailable property. Its value is '0'.
MSI (c) (1C:88) [16:54:25:627]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRequired property. Its value is '0'.
MSI (c) (1C:88) [16:54:25:627]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRemaining property. Its value is '0'.
MSI (c) (1C:88) [16:54:25:627]: Note: 1: 2205 2:  3: Patch
MSI (c) (1C:88) [16:54:25:627]: Note: 1: 2205 2:  3: Condition
MSI (c) (1C:88) [16:54:25:627]: PROPERTY CHANGE: Adding TARGETDIR property. Its value is 'C:\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding ProgramTelerikDir property. Its value is 'C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding ProgramMenuDir property. Its value is 'C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding TelerikFolder property. Its value is 'C:\Program Files\Telerik\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding INSTALLLOCATION property. Its value is 'C:\Program Files\Telerik\TeamPulse\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding logs.Folder property. Its value is 'C:\Program Files\Telerik\TeamPulse\Logs\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding IntegrationService property. Its value is 'C:\Program Files\Telerik\TeamPulse\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding Release property. Its value is 'C:\Program Files\Telerik\TeamPulse\IntegrationService\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding MappingDefaults property. Its value is 'C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding UserManagementRoot property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding Views property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding Welcome property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding Activation property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding Shared property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding License property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding Home property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding EditorTemplates property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding Scripts property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding Images property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Images\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding Content property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Content\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding bin property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\bin\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding WebRoot property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding binFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\bin\'.
MSI (c) (1C:88) [16:54:25:628]: PROPERTY CHANGE: Adding ClientBinFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\'.
MSI (c) (1C:88) [16:54:25:629]: PROPERTY CHANGE: Adding FeedsFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\'.
MSI (c) (1C:88) [16:54:25:629]: PROPERTY CHANGE: Adding ServiceFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Services\'.
MSI (c) (1C:88) [16:54:25:629]: PROPERTY CHANGE: Adding TempStorage.Folder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\'.
MSI (c) (1C:88) [16:54:25:629]: PROPERTY CHANGE: Adding ImagesFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Images\'.
MSI (c) (1C:88) [16:54:25:629]: PROPERTY CHANGE: Adding DownloadFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Download\'.
MSI (c) (1C:88) [16:54:25:629]: PROPERTY CHANGE: Adding CommonFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Common\'.
MSI (c) (1C:88) [16:54:25:629]: Target path resolution complete. Dumping Directory table...
MSI (c) (1C:88) [16:54:25:629]: Note: target paths subject to change (via custom actions or browsing)
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: TARGETDIR    , Object: C:\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: WindowsFolder    , Object: C:\Windows\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: ProgramMenuFolder    , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: ProgramTelerikDir    , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: ProgramMenuDir   , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: ProgramFilesFolder   , Object: C:\Program Files\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: TelerikFolder    , Object: C:\Program Files\Telerik\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: INSTALLLOCATION  , Object: C:\Program Files\Telerik\TeamPulse\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: logs.Folder  , Object: C:\Program Files\Telerik\TeamPulse\Logs\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: IntegrationService   , Object: C:\Program Files\Telerik\TeamPulse\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: Release  , Object: C:\Program Files\Telerik\TeamPulse\IntegrationService\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: MappingDefaults  , Object: C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: UserManagementRoot   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: Views    , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: Welcome  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: Activation   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: Shared   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: License  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: Home , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: EditorTemplates  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: Scripts  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: Images   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Images\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: Content  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Content\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: bin  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\bin\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: WebRoot  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: binFolder    , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\bin\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: ClientBinFolder  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: FeedsFolder  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: ServiceFolder    , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Services\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: TempStorage.Folder   , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: ImagesFolder , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Images\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: DownloadFolder   , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Download\
MSI (c) (1C:88) [16:54:25:629]: Dir (target): Key: CommonFolder , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Common\
MSI (c) (1C:88) [16:54:25:629]: PROPERTY CHANGE: Adding INSTALLLEVEL property. Its value is '1'.
MSI (c) (1C:88) [16:54:25:629]: Note: 1: 2205 2:  3: MsiAssembly
MSI (c) (1C:88) [16:54:25:629]: Note: 1: 2228 2:  3: MsiAssembly 4:  SELECT `MsiAssembly`.`Attributes`, `MsiAssembly`.`File_Application`, `MsiAssembly`.`File_Manifest`,  `Component`.`KeyPath` FROM `MsiAssembly`, `Component` WHERE  `MsiAssembly`.`Component_` = `Component`.`Component` AND `MsiAssembly`.`Component_` = ?
Action ended 16:54:25: CostFinalize. Return value 1.
MSI (c) (1C:88) [16:54:25:631]: Skipping action: MaintenanceWelcomeDlgTelerik (condition is false)
MSI (c) (1C:88) [16:54:25:631]: Skipping action: ResumeDlgTelerik (condition is false)
MSI (c) (1C:88) [16:54:25:631]: Skipping action: UpgradeDlgTelerik (condition is false)
MSI (c) (1C:88) [16:54:25:631]: Doing action: WelcomeDlgTelerik
Action 16:54:25: WelcomeDlgTelerik.
Action start 16:54:25: WelcomeDlgTelerik.
Info 2898. For Telerik_Warning textstyle, the system created a 'Arial' font, in 1 character set, of 15 pixels height.
Info 2898. For Telerik_Font_Title textstyle, the system created a 'Arial' font, in 1 character set, of 15 pixels height.
Action 16:54:25: WelcomeDlgTelerik. Dialog created
MSI (c) (1C:0C) [16:54:25:650]: Note: 1: 2205 2:  3: _RemoveFilePath
MSI (c) (1C:0C) [16:54:25:662]: PROPERTY CHANGE: Modifying CostingComplete property. Its current value is '0'. Its new value: '1'.
MSI (c) (1C:0C) [16:54:25:662]: Note: 1: 2205 2:  3: BindImage
MSI (c) (1C:0C) [16:54:25:662]: Note: 1: 2205 2:  3: ProgId
MSI (c) (1C:0C) [16:54:25:662]: Note: 1: 2205 2:  3: PublishComponent
MSI (c) (1C:0C) [16:54:25:662]: Note: 1: 2205 2:  3: SelfReg
MSI (c) (1C:0C) [16:54:25:662]: Note: 1: 2205 2:  3: Extension
MSI (c) (1C:0C) [16:54:25:662]: Note: 1: 2205 2:  3: Font
MSI (c) (1C:0C) [16:54:25:662]: Note: 1: 2205 2:  3: Class
MSI (c) (1C:0C) [16:54:25:662]: Note: 1: 2727 2: 
MSI (c) (1C:B0) [16:54:28:450]: PROPERTY CHANGE: Modifying INSTALLLEVEL property. Its current value is '1'. Its new value: '1000'.
MSI (c) (1C:B0) [16:54:28:452]: Note: 1: 2727 2: 
MSI (c) (1C:B0) [16:54:28:452]: Doing action: CheckCorrectVersionOfDotNet
Action 16:54:28: CheckCorrectVersionOfDotNet.
Action start 16:54:28: CheckCorrectVersionOfDotNet.
MSI (c) (1C:B0) [16:54:28:463]: Creating MSIHANDLE (1) of type 790542 for thread 3760
MSI (c) (1C:28) [16:54:28:463]: Invoking remote custom action. DLL: C:\Users\ADMINI~1\AppData\Local\Temp\1\MSID885.tmp, Entrypoint: CheckCorrectVersionOfDotNet
MSI (c) (1C:84) [16:54:28:465]: Cloaking enabled.
MSI (c) (1C:84) [16:54:28:465]: Attempting to enable all disabled privileges before calling Install on Server
MSI (c) (1C:84) [16:54:28:465]: Connected to service for CA interface.
MSI (c) (1C!4C) [16:54:28:545]: Creating MSIHANDLE (2) of type 790531 for thread 3916
MSI (c) (1C!4C) [16:54:28:546]: Closing MSIHANDLE (2) of type 790531 for thread 3916
MSI (c) (1C!4C) [16:54:28:619]: Creating MSIHANDLE (3) of type 790531 for thread 3916
MSI (c) (1C!4C) [16:54:28:620]: Closing MSIHANDLE (3) of type 790531 for thread 3916
MSI (c) (1C!4C) [16:54:28:744]: Creating MSIHANDLE (4) of type 790531 for thread 3916
MSI (c) (1C!4C) [16:54:28:748]: Closing MSIHANDLE (4) of type 790531 for thread 3916
MSI (c) (1C!4C) [16:54:28:823]: Creating MSIHANDLE (5) of type 790531 for thread 3916
MSI (c) (1C!4C) [16:54:28:824]: Closing MSIHANDLE (5) of type 790531 for thread 3916
MSI (c) (1C!4C) [16:54:28:826]: PROPERTY CHANGE: Modifying ISCORRECTNETFRAMEWORK40VERSION property. Its current value is '0'. Its new value: '1'.
MSI (c) (1C:28) [16:54:29:112]: Closing MSIHANDLE (1) of type 790542 for thread 3760
Action ended 16:54:29: CheckCorrectVersionOfDotNet. Return value 1.
Action 16:54:29: InstallRequirementsTelerik. Dialog created
Action 16:54:29: LicenseAgreementDlgTelerik. Dialog created
MSI (c) (1C:B0) [16:54:31:018]: PROPERTY CHANGE: Adding LicenseAccepted property. Its value is '1'.
MSI (c) (1C:B0) [16:54:31:874]: Doing action: GetUserInformation
Action 16:54:31: GetUserInformation.
Action start 16:54:31: GetUserInformation.
MSI (c) (1C:B0) [16:54:31:885]: Creating MSIHANDLE (6) of type 790542 for thread 3760
MSI (c) (1C:18) [16:54:31:885]: Invoking remote custom action. DLL: C:\Users\ADMINI~1\AppData\Local\Temp\1\MSIE5DE.tmp, Entrypoint: GetUserInformation
MSI (c) (1C!FC) [16:54:31:917]: Creating MSIHANDLE (7) of type 790531 for thread 1276
MSI (c) (1C!FC) [16:54:31:917]: Closing MSIHANDLE (7) of type 790531 for thread 1276
MSI (c) (1C!FC) [16:54:31:989]: Creating MSIHANDLE (8) of type 790531 for thread 1276
MSI (c) (1C!FC) [16:54:31:989]: Closing MSIHANDLE (8) of type 790531 for thread 1276
MSI (c) (1C!FC) [16:54:32:063]: Creating MSIHANDLE (9) of type 790531 for thread 1276
MSI (c) (1C!FC) [16:54:32:066]: Closing MSIHANDLE (9) of type 790531 for thread 1276
MSI (c) (1C!FC) [16:54:32:090]: Creating MSIHANDLE (10) of type 790531 for thread 1276
MSI (c) (1C!FC) [16:54:32:091]: Closing MSIHANDLE (10) of type 790531 for thread 1276
MSI (c) (1C!FC) [16:54:32:093]: PROPERTY CHANGE: Deleting USERNAME property. Its current value is 'Windows User'.
MSI (c) (1C!FC) [16:54:32:094]: PROPERTY CHANGE: Adding DOMAIN property. Its value is 'BUMBLEBEE'.
MSI (c) (1C!FC) [16:54:32:094]: PROPERTY CHANGE: Adding DB_DOMAIN property. Its value is 'BUMBLEBEE'.
MSI (c) (1C!FC) [16:54:32:094]: PROPERTY CHANGE: Adding USERNAME property. Its value is 'Administrator'.
MSI (c) (1C!FC) [16:54:32:094]: PROPERTY CHANGE: Adding DB_USERNAME property. Its value is 'Administrator'.
MSI (c) (1C!FC) [16:54:33:116]: Creating MSIHANDLE (11) of type 790531 for thread 1276
MSI (c) (1C!FC) [16:54:33:117]: Closing MSIHANDLE (11) of type 790531 for thread 1276
MSI (c) (1C!FC) [16:54:33:120]: Creating MSIHANDLE (12) of type 790531 for thread 1276
MSI (c) (1C!FC) [16:54:33:121]: Closing MSIHANDLE (12) of type 790531 for thread 1276
MSI (c) (1C:18) [16:54:33:485]: Closing MSIHANDLE (6) of type 790542 for thread 3760
Action ended 16:54:33: GetUserInformation. Return value 1.
Info 2898. For Telerik_Font_MidSizeText__UL textstyle, the system created a 'Arial' font, in 0 character set, of 15 pixels height.
Action 16:54:33: UserInfoDlgTelerik. Dialog created
MSI (c) (1C:B0) [16:54:34:706]: PROPERTY CHANGE: Modifying USERINFORBGSELECTION property. Its current value is '1'. Its new value: '0'.
Action 16:54:35: SetupTypeDlgTelerik. Dialog created
MSI (c) (1C:B0) [16:54:36:675]: PROPERTY CHANGE: Adding WixUI_InstallMode property. Its value is 'InstallComplete'.
MSI (c) (1C:B0) [16:54:36:678]: Note: 1: 2727 2: 
Info 2898. For WixUI_Font_Title textstyle, the system created a 'Arial' font, in 1 character set, of 15 pixels height.
Action 16:54:36: ConnectToDB. Dialog created
MSI (c) (1C:B0) [16:54:46:229]: PROPERTY CHANGE: Adding DB_PASSWORD property. Its value is '**********'.
MSI (c) (1C:B0) [16:54:51:230]: PROPERTY CHANGE: Modifying DB_PATH property. Its current value is '(local)\sqlexpress'. Its new value: 'BUMBLEBEE'.
MSI (c) (1C:B0) [16:54:51:319]: PROPERTY CHANGE: Modifying SERVER_CONNECTION_STRING property. Its current value is '**********'. Its new value: '**********'.
MSI (c) (1C:B0) [16:54:51:320]: Doing action: TestConnection
Action 16:54:51: TestConnection.
Action start 16:54:51: TestConnection.
MSI (c) (1C:B0) [16:54:51:330]: Creating MSIHANDLE (13) of type 790542 for thread 3760
MSI (c) (1C:FC) [16:54:51:330]: Invoking remote custom action. DLL: C:\Users\ADMINI~1\AppData\Local\Temp\1\MSI31DD.tmp, Entrypoint: TestDatabaseConnection
MSI (c) (1C!44) [16:54:51:362]: Creating MSIHANDLE (14) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:362]: Closing MSIHANDLE (14) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:433]: Creating MSIHANDLE (15) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:434]: Closing MSIHANDLE (15) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:520]: Creating MSIHANDLE (16) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:524]: Closing MSIHANDLE (16) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:575]: Creating MSIHANDLE (17) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:575]: Closing MSIHANDLE (17) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:576]: Creating MSIHANDLE (18) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:576]: Closing MSIHANDLE (18) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:684]: Creating MSIHANDLE (19) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:685]: Closing MSIHANDLE (19) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:691]: Creating MSIHANDLE (20) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:51:692]: Closing MSIHANDLE (20) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:52:543]: Creating MSIHANDLE (21) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:52:543]: Closing MSIHANDLE (21) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:52:544]: PROPERTY CHANGE: Modifying DB_CONNECTION_RESULT property. Its current value is '-1'. Its new value: '1'.
MSI (c) (1C!44) [16:54:52:544]: Creating MSIHANDLE (22) of type 790531 for thread 3652
MSI (c) (1C!44) [16:54:52:544]: Closing MSIHANDLE (22) of type 790531 for thread 3652
MSI (c) (1C:FC) [16:54:54:274]: Closing MSIHANDLE (13) of type 790542 for thread 3760
Action ended 16:54:54: TestConnection. Return value 1.
MSI (c) (1C:B0) [16:54:54:275]: PROPERTY CHANGE: Modifying DB_LAST_CONNECTION_RESULT property. Its current value is '-1'. Its new value: '1'.
MSI (c) (1C:B0) [16:54:55:312]: PROPERTY CHANGE: Modifying TEAMPULSE_CONNECTION_STRING property. Its current value is '**********'. Its new value: '**********'.
MSI (c) (1C:B0) [16:54:55:312]: Doing action: GetUniqueID
Action 16:54:55: GetUniqueID.
Action start 16:54:55: GetUniqueID.
MSI (c) (1C:B0) [16:54:55:323]: Creating MSIHANDLE (23) of type 790542 for thread 3760
MSI (c) (1C:20) [16:54:55:323]: Invoking remote custom action. DLL: C:\Users\ADMINI~1\AppData\Local\Temp\1\MSI4177.tmp, Entrypoint: GetMachineID
MSI (c) (1C!54) [16:54:55:358]: Creating MSIHANDLE (24) of type 790531 for thread 2644
MSI (c) (1C!54) [16:54:55:358]: Closing MSIHANDLE (24) of type 790531 for thread 2644
MSI (c) (1C!54) [16:54:55:429]: Creating MSIHANDLE (25) of type 790531 for thread 2644
MSI (c) (1C!54) [16:54:55:430]: Closing MSIHANDLE (25) of type 790531 for thread 2644
MSI (c) (1C!54) [16:54:55:512]: Creating MSIHANDLE (26) of type 790531 for thread 2644
MSI (c) (1C!54) [16:54:55:516]: Closing MSIHANDLE (26) of type 790531 for thread 2644
MSI (c) (1C!54) [16:54:55:551]: Creating MSIHANDLE (27) of type 790531 for thread 2644
MSI (c) (1C!54) [16:54:55:551]: Closing MSIHANDLE (27) of type 790531 for thread 2644
MSI (c) (1C!54) [16:54:55:649]: PROPERTY CHANGE: Adding MACHINEID property. Its value is '**********'.
MSI (c) (1C:20) [16:54:55:879]: Closing MSIHANDLE (23) of type 790542 for thread 3760
Action ended 16:54:55: GetUniqueID. Return value 1.
MSI (c) (1C:B0) [16:54:55:880]: PROPERTY CHANGE: Modifying DB_CONNECTION_RESULT property. Its current value is '1'. Its new value: '-1'.
Info 2898. For Telerik_Font_TeamPulse textstyle, the system created a 'Arial' font, in 1 character set, of 18 pixels height.
Action 16:54:55: VerifyReadyDlgTelerik. Dialog created
MSI (c) (1C:B0) [16:54:56:398]: Note: 1: 2727 2: 
MSI (c) (1C:B0) [16:54:56:904]: Note: 1: 2727 2: 
MSI (c) (1C:B0) [16:54:57:404]: Note: 1: 2727 2: 
MSI (c) (1C:B0) [16:54:57:919]: Note: 1: 2727 2: 
MSI (c) (1C:B0) [16:54:58:419]: Note: 1: 2727 2: 
MSI (c) (1C:B0) [16:54:58:933]: Note: 1: 2727 2: 
Action ended 16:54:59: WelcomeDlgTelerik. Return value 1.
MSI (c) (1C:88) [16:54:59:090]: Doing action: ProgressDlgTelerik
Action 16:54:59: ProgressDlgTelerik.
Action start 16:54:59: ProgressDlgTelerik.
Action 16:54:59: ProgressDlgTelerik. Dialog created
Action ended 16:54:59: ProgressDlgTelerik. Return value 1.
MSI (c) (1C:88) [16:54:59:151]: Doing action: ExecuteAction
Action 16:54:59: ExecuteAction.
Action start 16:54:59: ExecuteAction.
MSI (c) (1C:88) [16:54:59:153]: PROPERTY CHANGE: Adding SECONDSEQUENCE property. Its value is '1'.
MSI (c) (1C:88) [16:54:59:153]: Grabbed execution mutex.
MSI (c) (1C:88) [16:54:59:153]: Incrementing counter to disable shutdown. Counter after increment: 0
MSI (c) (1C:88) [16:54:59:154]: Switching to server: ASPNET="#1" ASPNET64="#1" IIS7ADMINSVC="#1" IIS7ADMINSVC64="#1" IIS7MGMTCONSOLE="#1" IIS7MGMTCONSOLE64="#1" IIS7WINDOWSAUTH="#1" IIS7WINDOWSAUTH64="#1" DEFAULTDOCUMENT="#1" DEFAULTDOCUMENT64="#1" HTTPREDIRECTION="#1" HTTPREDIRECTION64="#1" STATICCONTENT="#1" STATICCONTENT64="#1" NETFRAMEWORK40="C:\Windows\Microsoft.NET\Framework\v4.0.30319\" INSTALLLOCATION="C:\Program Files\Telerik\TeamPulse\" NETSH="C:\Windows\system32\Netsh.exe" IISMAJORVERSION="#7" IISMINORVERSION="#0" USERINFORBGSELECTION="0" DOMAIN="BUMBLEBEE" USERNAME="Administrator" DB_PATH="BUMBLEBEE" DB_DOMAIN="BUMBLEBEE" DB_USERNAME="Administrator" DB_PASSWORD=********** COMPANYNAME="TeamPulse" TARGETDIR="C:\" ISCORRECTNETFRAMEWORK40VERSION="1" TEAMPULSE_CONNECTION_STRING=********** SERVER_CONNECTION_STRING=********** DB_LAST_CONNECTION_RESULT="1" CURRENTDIRECTORY="C:\" CLIENTUILEVEL="0" CLIENTPROCESSID="3612" SOURCEDIR="C:\" ACTION="INSTALL" EXECUTEACTION="INSTALL" SECONDSEQUENCE="1" ROOTDRIVE="C:\" INSTALLLEVEL="1000" MACHINEID=**********  ADDLOCAL=ProductFeature 
MSI (s) (98:F0) [16:54:59:158]: Running installation inside multi-package transaction C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
MSI (s) (98:F0) [16:54:59:158]: Grabbed execution mutex.
MSI (s) (98:28) [16:54:59:159]: Resetting cached policy values
MSI (s) (98:28) [16:54:59:159]: Machine policy value 'Debug' is 0
MSI (s) (98:28) [16:54:59:159]: ******* RunEngine:
           ******* Product: C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
           ******* Action: INSTALL
           ******* CommandLine: **********
MSI (s) (98:28) [16:54:59:160]: Machine policy value 'DisableUserInstalls' is 0
MSI (s) (98:28) [16:54:59:161]: Setting cached product context: User non-assigned for product: F0F9292441ECFA74F97CFF92A7060312
MSI (s) (98:28) [16:54:59:161]: Using cached product context: User non-assigned for product: F0F9292441ECFA74F97CFF92A7060312
MSI (s) (98:28) [16:54:59:161]: Setting cached product context: machine assigned for product: 000021599B0090400000000000F01FEC
MSI (s) (98:28) [16:54:59:161]: Using cached product context: machine assigned for product: 000021599B0090400000000000F01FEC
MSI (s) (98:28) [16:54:59:161]: Setting cached product context: machine assigned for product: 00969995C6E07B54C8936CC49B48264E
MSI (s) (98:28) [16:54:59:161]: Using cached product context: machine assigned for product: 00969995C6E07B54C8936CC49B48264E
MSI (s) (98:28) [16:54:59:161]: Setting cached product context: machine assigned for product: 06A5DB8A348ECD642817BA2F7065EBF0
MSI (s) (98:28) [16:54:59:161]: Using cached product context: machine assigned for product: 06A5DB8A348ECD642817BA2F7065EBF0
MSI (s) (98:28) [16:54:59:162]: Setting cached product context: machine assigned for product: 162AD4AB06BC09642B204499D8CF9668
MSI (s) (98:28) [16:54:59:162]: Using cached product context: machine assigned for product: 162AD4AB06BC09642B204499D8CF9668
MSI (s) (98:28) [16:54:59:162]: Setting cached product context: machine assigned for product: 26DDC2EC4210AC63483DF9D4FCC5B59D
MSI (s) (98:28) [16:54:59:162]: Using cached product context: machine assigned for product: 26DDC2EC4210AC63483DF9D4FCC5B59D
MSI (s) (98:28) [16:54:59:162]: Setting cached product context: machine assigned for product: 27AE7A6000F035D48AC15A9D52171114
MSI (s) (98:28) [16:54:59:162]: Using cached product context: machine assigned for product: 27AE7A6000F035D48AC15A9D52171114
MSI (s) (98:28) [16:54:59:162]: Setting cached product context: machine assigned for product: 2A00B98CA27B539469CF8397E65945CE
MSI (s) (98:28) [16:54:59:163]: Using cached product context: machine assigned for product: 2A00B98CA27B539469CF8397E65945CE
MSI (s) (98:28) [16:54:59:163]: Setting cached product context: machine assigned for product: 2ABBA57271843444A98BDE34ACA9AA71
MSI (s) (98:28) [16:54:59:163]: Using cached product context: machine assigned for product: 2ABBA57271843444A98BDE34ACA9AA71
MSI (s) (98:28) [16:54:59:163]: Setting cached product context: machine assigned for product: 2E43F6A45E9061642B72A4624A886A9F
MSI (s) (98:28) [16:54:59:163]: Using cached product context: machine assigned for product: 2E43F6A45E9061642B72A4624A886A9F
MSI (s) (98:28) [16:54:59:163]: Setting cached product context: machine assigned for product: 2F8EDC4619735F64AB2D27FF5F52F2BA
MSI (s) (98:28) [16:54:59:163]: Using cached product context: machine assigned for product: 2F8EDC4619735F64AB2D27FF5F52F2BA
MSI (s) (98:28) [16:54:59:163]: Setting cached product context: machine assigned for product: 3323515BEEA94DC4D9C2F4AA8C07BD2E
MSI (s) (98:28) [16:54:59:163]: Using cached product context: machine assigned for product: 3323515BEEA94DC4D9C2F4AA8C07BD2E
MSI (s) (98:28) [16:54:59:164]: Setting cached product context: machine assigned for product: 3A7A134378260B64A81FEB42251AEF26
MSI (s) (98:28) [16:54:59:164]: Using cached product context: machine assigned for product: 3A7A134378260B64A81FEB42251AEF26
MSI (s) (98:28) [16:54:59:164]: Setting cached product context: machine assigned for product: 3CE12785E4D897B4CB1501452EDDDC01
MSI (s) (98:28) [16:54:59:164]: Using cached product context: machine assigned for product: 3CE12785E4D897B4CB1501452EDDDC01
MSI (s) (98:28) [16:54:59:164]: Setting cached product context: machine assigned for product: 4263C9AF396C3244A8B8B22C9B6F70BA
MSI (s) (98:28) [16:54:59:164]: Using cached product context: machine assigned for product: 4263C9AF396C3244A8B8B22C9B6F70BA
MSI (s) (98:28) [16:54:59:165]: Setting cached product context: machine assigned for product: 5C1093C35543A0E32A41B090A305076A
MSI (s) (98:28) [16:54:59:165]: Using cached product context: machine assigned for product: 5C1093C35543A0E32A41B090A305076A
MSI (s) (98:28) [16:54:59:165]: Setting cached product context: machine assigned for product: 5C77E691425F05B4DBA1C212EE9E8B7F
MSI (s) (98:28) [16:54:59:165]: Using cached product context: machine assigned for product: 5C77E691425F05B4DBA1C212EE9E8B7F
MSI (s) (98:28) [16:54:59:165]: Setting cached product context: machine assigned for product: 626A04EB76923F04D9B6185011FA67EB
MSI (s) (98:28) [16:54:59:165]: Using cached product context: machine assigned for product: 626A04EB76923F04D9B6185011FA67EB
MSI (s) (98:28) [16:54:59:165]: Setting cached product context: machine assigned for product: 6BA4943F00966C14FA7528636228E78D
MSI (s) (98:28) [16:54:59:165]: Using cached product context: machine assigned for product: 6BA4943F00966C14FA7528636228E78D
MSI (s) (98:28) [16:54:59:165]: Setting cached product context: machine assigned for product: 7DA4D243C4CE8CE4EA6A7EF095504A09
MSI (s) (98:28) [16:54:59:166]: Using cached product context: machine assigned for product: 7DA4D243C4CE8CE4EA6A7EF095504A09
MSI (s) (98:28) [16:54:59:166]: Setting cached product context: machine assigned for product: 868D758B0B8FEE34CBB29D5EDE122F73
MSI (s) (98:28) [16:54:59:166]: Using cached product context: machine assigned for product: 868D758B0B8FEE34CBB29D5EDE122F73
MSI (s) (98:28) [16:54:59:166]: Setting cached product context: machine assigned for product: 98E9EA339C74D0A4E9D9DB6D69A68340
MSI (s) (98:28) [16:54:59:166]: Using cached product context: machine assigned for product: 98E9EA339C74D0A4E9D9DB6D69A68340
MSI (s) (98:28) [16:54:59:166]: Setting cached product context: machine assigned for product: 99DB51844A69EF948A58CD0FE6E9E487
MSI (s) (98:28) [16:54:59:166]: Using cached product context: machine assigned for product: 99DB51844A69EF948A58CD0FE6E9E487
MSI (s) (98:28) [16:54:59:167]: Setting cached product context: machine assigned for product: B5400202FCD89444D8C5BEB53A47041F
MSI (s) (98:28) [16:54:59:167]: Using cached product context: machine assigned for product: B5400202FCD89444D8C5BEB53A47041F
MSI (s) (98:28) [16:54:59:167]: Setting cached product context: machine assigned for product: BE31195E5820DFB43AA77BE9CAB6F8B4
MSI (s) (98:28) [16:54:59:167]: Using cached product context: machine assigned for product: BE31195E5820DFB43AA77BE9CAB6F8B4
MSI (s) (98:28) [16:54:59:167]: Setting cached product context: machine assigned for product: C10F569CAE677DB479E36432A63E217D
MSI (s) (98:28) [16:54:59:167]: Using cached product context: machine assigned for product: C10F569CAE677DB479E36432A63E217D
MSI (s) (98:28) [16:54:59:167]: Setting cached product context: machine assigned for product: C2B4A4AA56408FC3AB67720A728DCABA
MSI (s) (98:28) [16:54:59:167]: Using cached product context: machine assigned for product: C2B4A4AA56408FC3AB67720A728DCABA
MSI (s) (98:28) [16:54:59:168]: Setting cached product context: machine assigned for product: D7314F9862C648A4DB8BE2A5B47BE100
MSI (s) (98:28) [16:54:59:168]: Using cached product context: machine assigned for product: D7314F9862C648A4DB8BE2A5B47BE100
MSI (s) (98:28) [16:54:59:168]: Setting cached product context: machine assigned for product: E754886CDF30149429B32AF7D4247ADD
MSI (s) (98:28) [16:54:59:168]: Using cached product context: machine assigned for product: E754886CDF30149429B32AF7D4247ADD
MSI (s) (98:28) [16:54:59:168]: Setting cached product context: machine assigned for product: EA5B44F46A28A8A43A3E2ED48479823E
MSI (s) (98:28) [16:54:59:168]: Using cached product context: machine assigned for product: EA5B44F46A28A8A43A3E2ED48479823E
MSI (s) (98:28) [16:54:59:168]: Setting cached product context: machine assigned for product: EED64D061225AA749B87AB525C9D5F06
MSI (s) (98:28) [16:54:59:169]: Using cached product context: machine assigned for product: EED64D061225AA749B87AB525C9D5F06
MSI (s) (98:28) [16:54:59:169]: Setting cached product context: machine assigned for product: F01A5C10B9DAB50458A3669548A12124
MSI (s) (98:28) [16:54:59:169]: Using cached product context: machine assigned for product: F01A5C10B9DAB50458A3669548A12124
MSI (s) (98:28) [16:54:59:169]: Setting cached product context: machine assigned for product: F1CD45CA7ADEC844ABC412A8295F9E58
MSI (s) (98:28) [16:54:59:169]: Using cached product context: machine assigned for product: F1CD45CA7ADEC844ABC412A8295F9E58
MSI (s) (98:28) [16:54:59:169]: Setting cached product context: machine assigned for product: FAA9C0AB723160F34BC943B9B48E7F04
MSI (s) (98:28) [16:54:59:169]: Using cached product context: machine assigned for product: FAA9C0AB723160F34BC943B9B48E7F04
MSI (s) (98:28) [16:54:59:169]: Setting cached product context: machine assigned for product: FCDAC0A0AD874C333A05DC1548B97920
MSI (s) (98:28) [16:54:59:170]: Using cached product context: machine assigned for product: FCDAC0A0AD874C333A05DC1548B97920
MSI (s) (98:28) [16:54:59:170]: Setting cached product context: machine assigned for product: FCFE82D499952D44D8E4CA46E3673CF3
MSI (s) (98:28) [16:54:59:170]: Using cached product context: machine assigned for product: FCFE82D499952D44D8E4CA46E3673CF3
MSI (s) (98:28) [16:54:59:174]: Machine policy value 'LimitSystemRestoreCheckpointing' is 0
MSI (s) (98:28) [16:54:59:174]: Note: 1: 1715 2: Telerik TeamPulse
MSI (s) (98:28) [16:54:59:174]: Calling SRSetRestorePoint API. dwRestorePtType: 0, dwEventType: 102, llSequenceNumber: 0, szDescription: "Installed Telerik TeamPulse".
MSI (s) (98:28) [16:54:59:174]: The call to SRSetRestorePoint API failed. Returned status: 0. GetLastError() returned: 127
MSI (s) (98:28) [16:54:59:176]: File will have security applied from OpCode.
MSI (s) (98:28) [16:54:59:228]: SOFTWARE RESTRICTION POLICY: Verifying package --> 'C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi' against software restriction policy
MSI (s) (98:28) [16:54:59:229]: SOFTWARE RESTRICTION POLICY: C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi has a digital signature
MSI (s) (98:28) [16:54:59:313]: SOFTWARE RESTRICTION POLICY: C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi is permitted to run at the 'unrestricted' authorization level.
MSI (s) (98:28) [16:54:59:313]: End dialog not enabled
MSI (s) (98:28) [16:54:59:314]: Original package ==> C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
MSI (s) (98:28) [16:54:59:314]: Package we're running from ==> C:\Windows\Installer\5e8f9.msi
MSI (s) (98:28) [16:54:59:316]: APPCOMPAT: looking for appcompat database entry with ProductCode '{02E84302-F860-462A-BF16-FE2D92A4A06A}'.
MSI (s) (98:28) [16:54:59:316]: APPCOMPAT: no matching ProductCode found in database.
MSI (s) (98:28) [16:54:59:319]: MSCOREE not loaded loading copy from system32
MSI (s) (98:28) [16:54:59:322]: Machine policy value 'TransformsSecure' is 1
MSI (s) (98:28) [16:54:59:322]: Machine policy value 'DisablePatch' is 0
MSI (s) (98:28) [16:54:59:322]: Machine policy value 'AllowLockdownPatch' is 0
MSI (s) (98:28) [16:54:59:322]: Machine policy value 'DisableLUAPatching' is 0
MSI (s) (98:28) [16:54:59:322]: Machine policy value 'DisableFlyWeightPatching' is 0
MSI (s) (98:28) [16:54:59:322]: Enabling baseline caching for this transaction since all active patches are MSI 3.0 style MSPs or at least one MSI 3.0 minor update patch is active
MSI (s) (98:28) [16:54:59:323]: APPCOMPAT: looking for appcompat database entry with ProductCode '{02E84302-F860-462A-BF16-FE2D92A4A06A}'.
MSI (s) (98:28) [16:54:59:323]: APPCOMPAT: no matching ProductCode found in database.
MSI (s) (98:28) [16:54:59:323]: Transforms are not secure.
MSI (s) (98:28) [16:54:59:323]: PROPERTY CHANGE: Adding MsiLogFileLocation property. Its value is 'C:\teampulselog.txt'.
MSI (s) (98:28) [16:54:59:324]: Command Line: ASPNET=#1 ASPNET64=#1 IIS7ADMINSVC=#1 IIS7ADMINSVC64=#1 IIS7MGMTCONSOLE=#1 IIS7MGMTCONSOLE64=#1 IIS7WINDOWSAUTH=#1 IIS7WINDOWSAUTH64=#1 DEFAULTDOCUMENT=#1 DEFAULTDOCUMENT64=#1 HTTPREDIRECTION=#1 HTTPREDIRECTION64=#1 STATICCONTENT=#1 STATICCONTENT64=#1 NETFRAMEWORK40=C:\Windows\Microsoft.NET\Framework\v4.0.30319\ INSTALLLOCATION=C:\Program Files\Telerik\TeamPulse\ NETSH=C:\Windows\system32\Netsh.exe IISMAJORVERSION=#7 IISMINORVERSION=#0 USERINFORBGSELECTION=0 DOMAIN=BUMBLEBEE USERNAME=Administrator DB_PATH=BUMBLEBEE DB_DOMAIN=BUMBLEBEE DB_USERNAME=Administrator DB_PASSWORD=********** COMPANYNAME=TeamPulse TARGETDIR=C:\ ISCORRECTNETFRAMEWORK40VERSION=1 TEAMPULSE_CONNECTION_STRING=********** SERVER_CONNECTION_STRING=********** DB_LAST_CONNECTION_RESULT=1 CURRENTDIRECTORY=C:\ CLIENTUILEVEL=0 CLIENTPROCESSID=3612 SOURCEDIR=C:\ ACTION=INSTALL EXECUTEACTION=INSTALL SECONDSEQUENCE=1 ROOTDRIVE=C:\ INSTALLLEVEL=1000 MACHINEID=********** ADDLOCAL=ProductFeature ACTION=INSTALL
MSI (s) (98:28) [16:54:59:324]: PROPERTY CHANGE: Adding PackageCode property. Its value is '{99765709-1FEF-4648-A08B-9B16F74CFA8D}'.
MSI (s) (98:28) [16:54:59:324]: Product Code passed to Engine.Initialize:           ''
MSI (s) (98:28) [16:54:59:324]: Product Code from property table before transforms: '{02E84302-F860-462A-BF16-FE2D92A4A06A}'
MSI (s) (98:28) [16:54:59:324]: Product Code from property table after transforms:  '{02E84302-F860-462A-BF16-FE2D92A4A06A}'
MSI (s) (98:28) [16:54:59:324]: Product not registered: beginning first-time install
MSI (s) (98:28) [16:54:59:324]: Product {02E84302-F860-462A-BF16-FE2D92A4A06A} is not managed.
MSI (s) (98:28) [16:54:59:324]: MSI_LUA: Credential prompt not required, user is an admin
MSI (s) (98:28) [16:54:59:324]: PROPERTY CHANGE: Adding ProductState property. Its value is '-1'.
MSI (s) (98:28) [16:54:59:324]: Entering CMsiConfigurationManager::SetLastUsedSource.
MSI (s) (98:28) [16:54:59:325]: User policy value 'SearchOrder' is 'nmu'
MSI (s) (98:28) [16:54:59:325]: Adding new sources is allowed.
MSI (s) (98:28) [16:54:59:325]: PROPERTY CHANGE: Adding PackagecodeChanging property. Its value is '1'.
MSI (s) (98:28) [16:54:59:325]: Package name extracted from package path: 'Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'
MSI (s) (98:28) [16:54:59:325]: Package to be registered: 'Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'
MSI (s) (98:28) [16:54:59:326]: Note: 1: 2262 2: AdminProperties 3: -2147287038
MSI (s) (98:28) [16:54:59:326]: Machine policy value 'DisableMsi' is 1
MSI (s) (98:28) [16:54:59:326]: Machine policy value 'AlwaysInstallElevated' is 0
MSI (s) (98:28) [16:54:59:326]: User policy value 'AlwaysInstallElevated' is 0
MSI (s) (98:28) [16:54:59:326]: Running product '{02E84302-F860-462A-BF16-FE2D92A4A06A}' with user privileges: It's not assigned.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding ASPNET property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding ASPNET64 property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding IIS7ADMINSVC property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding IIS7ADMINSVC64 property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding IIS7MGMTCONSOLE property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding IIS7MGMTCONSOLE64 property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding IIS7WINDOWSAUTH property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding IIS7WINDOWSAUTH64 property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding DEFAULTDOCUMENT property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding DEFAULTDOCUMENT64 property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding HTTPREDIRECTION property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding HTTPREDIRECTION64 property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding STATICCONTENT property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:326]: PROPERTY CHANGE: Adding STATICCONTENT64 property. Its value is '#1'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding NETFRAMEWORK40 property. Its value is 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding INSTALLLOCATION property. Its value is 'C:\Program Files\Telerik\TeamPulse\'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding NETSH property. Its value is 'C:\Windows\system32\Netsh.exe'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding IISMAJORVERSION property. Its value is '#7'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding IISMINORVERSION property. Its value is '#0'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Modifying USERINFORBGSELECTION property. Its current value is '1'. Its new value: '0'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding DOMAIN property. Its value is 'BUMBLEBEE'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding USERNAME property. Its value is 'Administrator'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Modifying DB_PATH property. Its current value is '(local)\sqlexpress'. Its new value: 'BUMBLEBEE'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding DB_DOMAIN property. Its value is 'BUMBLEBEE'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding DB_USERNAME property. Its value is 'Administrator'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding DB_PASSWORD property. Its value is '**********'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding COMPANYNAME property. Its value is 'TeamPulse'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding TARGETDIR property. Its value is 'C:\'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Modifying ISCORRECTNETFRAMEWORK40VERSION property. Its current value is '0'. Its new value: '1'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Modifying TEAMPULSE_CONNECTION_STRING property. Its current value is '**********'. Its new value: '**********'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Modifying SERVER_CONNECTION_STRING property. Its current value is '**********'. Its new value: '**********'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Modifying DB_LAST_CONNECTION_RESULT property. Its current value is '-1'. Its new value: '1'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding CURRENTDIRECTORY property. Its value is 'C:\'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding CLIENTUILEVEL property. Its value is '0'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding CLIENTPROCESSID property. Its value is '3612'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding SOURCEDIR property. Its value is 'C:\'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding ACTION property. Its value is 'INSTALL'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding EXECUTEACTION property. Its value is 'INSTALL'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding SECONDSEQUENCE property. Its value is '1'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding ROOTDRIVE property. Its value is 'C:\'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding INSTALLLEVEL property. Its value is '1000'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding MACHINEID property. Its value is '**********'.
MSI (s) (98:28) [16:54:59:327]: PROPERTY CHANGE: Adding ADDLOCAL property. Its value is 'ProductFeature'.
MSI (s) (98:28) [16:54:59:327]: Machine policy value 'DisableAutomaticApplicationShutdown' is 0
MSI (s) (98:28) [16:54:59:328]: PROPERTY CHANGE: Adding MsiRestartManagerSessionKey property. Its value is '8c94f6dcb85eea4fb8d7cd401395d496'.
MSI (s) (98:28) [16:54:59:328]: RESTART MANAGER: Session opened.
MSI (s) (98:28) [16:54:59:328]: Engine has iefSecondSequence set to true.
MSI (s) (98:28) [16:54:59:328]: TRANSFORMS property is now:
MSI (s) (98:28) [16:54:59:328]: PROPERTY CHANGE: Deleting SOURCEDIR property. Its current value is 'C:\'.
MSI (s) (98:28) [16:54:59:328]: PROPERTY CHANGE: Adding VersionDatabase property. Its value is '200'.
MSI (s) (98:28) [16:54:59:329]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming
MSI (s) (98:28) [16:54:59:330]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Favorites
MSI (s) (98:28) [16:54:59:331]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts
MSI (s) (98:28) [16:54:59:332]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Documents
MSI (s) (98:28) [16:54:59:333]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
MSI (s) (98:28) [16:54:59:334]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent
MSI (s) (98:28) [16:54:59:334]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo
MSI (s) (98:28) [16:54:59:335]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates
MSI (s) (98:28) [16:54:59:335]: SHELL32::SHGetFolderPath returned: C:\ProgramData
MSI (s) (98:28) [16:54:59:336]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Local
MSI (s) (98:28) [16:54:59:337]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Pictures
MSI (s) (98:28) [16:54:59:339]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
MSI (s) (98:28) [16:54:59:340]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
MSI (s) (98:28) [16:54:59:341]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
MSI (s) (98:28) [16:54:59:341]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu
MSI (s) (98:28) [16:54:59:342]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Desktop
MSI (s) (98:28) [16:54:59:344]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
MSI (s) (98:28) [16:54:59:345]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
MSI (s) (98:28) [16:54:59:346]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs
MSI (s) (98:28) [16:54:59:347]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu
MSI (s) (98:28) [16:54:59:348]: SHELL32::SHGetFolderPath returned: C:\Users\Public\Desktop
MSI (s) (98:28) [16:54:59:348]: SHELL32::SHGetFolderPath returned: C:\Windows\Fonts
MSI (s) (98:28) [16:54:59:348]: Note: 1: 2898 2: MS Sans Serif 3: MS Sans Serif 4: 0 5: 16
MSI (s) (98:28) [16:54:59:352]: MSI_LUA: Setting MsiRunningElevated property to 1 because the install is already running elevated.
MSI (s) (98:28) [16:54:59:352]: PROPERTY CHANGE: Adding MsiRunningElevated property. Its value is '1'.
MSI (s) (98:28) [16:54:59:352]: PROPERTY CHANGE: Adding Privileged property. Its value is '1'.
MSI (s) (98:28) [16:54:59:352]: PROPERTY CHANGE: Adding DATABASE property. Its value is 'C:\Windows\Installer\5e8f9.msi'.
MSI (s) (98:28) [16:54:59:352]: PROPERTY CHANGE: Adding OriginalDatabase property. Its value is 'C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'.
MSI (s) (98:28) [16:54:59:352]: Machine policy value 'MsiDisableEmbeddedUI' is 0
MSI (s) (98:28) [16:54:59:352]: EEUI - Disabling MsiEmbeddedUI for service because it's not a quiet/basic install
MSI (s) (98:28) [16:54:59:352]: Note: 1: 2205 2:  3: PatchPackage
MSI (s) (98:28) [16:54:59:352]: Machine policy value 'DisableRollback' is 0
MSI (s) (98:28) [16:54:59:352]: User policy value 'DisableRollback' is 0
MSI (s) (98:28) [16:54:59:352]: PROPERTY CHANGE: Adding UILevel property. Its value is '5'.
MSI (s) (98:28) [16:54:59:353]: PROPERTY CHANGE: Adding Preselected property. Its value is '1'.
MSI (s) (98:28) [16:54:59:353]: Doing action: INSTALL
Action 16:54:59: INSTALL.
Action start 16:54:59: INSTALL.
MSI (s) (98:28) [16:54:59:355]: Running ExecuteSequence
MSI (s) (98:28) [16:54:59:355]: Doing action: FindRelatedProducts
Action 16:54:59: FindRelatedProducts. Searching for related applications
Action start 16:54:59: FindRelatedProducts.
MSI (s) (98:28) [16:54:59:356]: Skipping FindRelatedProducts action: already done on client side
Action ended 16:54:59: FindRelatedProducts. Return value 0.
MSI (s) (98:28) [16:54:59:357]: Skipping action: NoDowngrade (condition is false)
MSI (s) (98:28) [16:54:59:357]: Doing action: SetCOMPANYNAME
Action 16:54:59: SetCOMPANYNAME.
Action start 16:54:59: SetCOMPANYNAME.
Action ended 16:54:59: SetCOMPANYNAME. Return value 1.
MSI (s) (98:28) [16:54:59:359]: Doing action: AppSearch
Action 16:54:59: AppSearch. Searching for installed applications
Action start 16:54:59: AppSearch.
MSI (s) (98:28) [16:54:59:360]: Skipping AppSearch action: already done on client side
Action ended 16:54:59: AppSearch. Return value 0.
MSI (s) (98:28) [16:54:59:361]: Doing action: ValidateProductID
Action 16:54:59: ValidateProductID.
Action start 16:54:59: ValidateProductID.
Action ended 16:54:59: ValidateProductID. Return value 1.
MSI (s) (98:28) [16:54:59:362]: Doing action: CostInitialize
Action 16:54:59: CostInitialize. Computing space requirements
Action start 16:54:59: CostInitialize.
MSI (s) (98:28) [16:54:59:364]: Machine policy value 'MaxPatchCacheSize' is 10
MSI (s) (98:28) [16:54:59:364]: Baseline: Sorting baselines for {02E84302-F860-462A-BF16-FE2D92A4A06A}.
MSI (s) (98:28) [16:54:59:364]: Baseline: New baseline 103.11.17 from transaction.
MSI (s) (98:28) [16:54:59:364]: Baseline: Sorted order Native: Order 0.
MSI (s) (98:28) [16:54:59:364]: Baseline Data Table:
MSI (s) (98:28) [16:54:59:364]: ProductCode: {02E84302-F860-462A-BF16-FE2D92A4A06A} Version: 103.11.17 Attributes: 0 PatchId: Native BaselineId: -2147483648 Order: 0
MSI (s) (98:28) [16:54:59:364]: Baseline File Table:
MSI (s) (98:28) [16:54:59:365]: PROPERTY CHANGE: Adding CostingComplete property. Its value is '0'.
MSI (s) (98:28) [16:54:59:365]: Note: 1: 2205 2:  3: Patch
MSI (s) (98:28) [16:54:59:365]: Note: 1: 2205 2:  3: PatchPackage
MSI (s) (98:28) [16:54:59:365]: Note: 1: 2205 2:  3: MsiPatchHeaders
MSI (s) (98:28) [16:54:59:365]: Note: 1: 2205 2:  3: __MsiPatchFileList
MSI (s) (98:28) [16:54:59:365]: Note: 1: 2205 2:  3: PatchPackage
MSI (s) (98:28) [16:54:59:365]: Note: 1: 2228 2:  3: PatchPackage 4: SELECT `DiskId`, `PatchId`, `LastSequence` FROM `Media`, `PatchPackage` WHERE `Media`.`DiskId`=`PatchPackage`.`Media_` ORDER BY `DiskId` 
MSI (s) (98:28) [16:54:59:365]: Delta compression fallback method for this product transaction is 'MSI 2.0 legacy obsolescence'
MSI (s) (98:28) [16:54:59:365]: Note: 1: 2205 2:  3: Patch
Action ended 16:54:59: CostInitialize. Return value 1.
MSI (s) (98:28) [16:54:59:366]: Doing action: FileCost
Action 16:54:59: FileCost. Computing space requirements
Action start 16:54:59: FileCost.
MSI (s) (98:28) [16:54:59:367]: Note: 1: 2205 2:  3: MsiAssembly
MSI (s) (98:28) [16:54:59:367]: Note: 1: 2205 2:  3: Class
MSI (s) (98:28) [16:54:59:367]: Note: 1: 2205 2:  3: Extension
MSI (s) (98:28) [16:54:59:367]: Note: 1: 2205 2:  3: TypeLib
Action ended 16:54:59: FileCost. Return value 1.
MSI (s) (98:28) [16:54:59:368]: Doing action: CostFinalize
Action 16:54:59: CostFinalize. Computing space requirements
Action start 16:54:59: CostFinalize.
MSI (s) (98:28) [16:54:59:369]: PROPERTY CHANGE: Adding OutOfDiskSpace property. Its value is '0'.
MSI (s) (98:28) [16:54:59:369]: PROPERTY CHANGE: Adding OutOfNoRbDiskSpace property. Its value is '0'.
MSI (s) (98:28) [16:54:59:369]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceAvailable property. Its value is '0'.
MSI (s) (98:28) [16:54:59:369]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRequired property. Its value is '0'.
MSI (s) (98:28) [16:54:59:369]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRemaining property. Its value is '0'.
MSI (s) (98:28) [16:54:59:369]: Note: 1: 2205 2:  3: Patch
MSI (s) (98:28) [16:54:59:369]: Note: 1: 2205 2:  3: Condition
MSI (s) (98:28) [16:54:59:370]: PROPERTY CHANGE: Adding ProgramTelerikDir property. Its value is 'C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\'.
MSI (s) (98:28) [16:54:59:370]: PROPERTY CHANGE: Adding ProgramMenuDir property. Its value is 'C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\'.
MSI (s) (98:28) [16:54:59:370]: PROPERTY CHANGE: Adding TelerikFolder property. Its value is 'C:\Program Files\Telerik\'.
MSI (s) (98:28) [16:54:59:370]: PROPERTY CHANGE: Adding logs.Folder property. Its value is 'C:\Program Files\Telerik\TeamPulse\Logs\'.
MSI (s) (98:28) [16:54:59:370]: PROPERTY CHANGE: Adding IntegrationService property. Its value is 'C:\Program Files\Telerik\TeamPulse\'.
MSI (s) (98:28) [16:54:59:370]: PROPERTY CHANGE: Adding Release property. Its value is 'C:\Program Files\Telerik\TeamPulse\IntegrationService\'.
MSI (s) (98:28) [16:54:59:370]: PROPERTY CHANGE: Adding MappingDefaults property. Its value is 'C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\'.
MSI (s) (98:28) [16:54:59:370]: PROPERTY CHANGE: Adding UserManagementRoot property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\'.
MSI (s) (98:28) [16:54:59:370]: PROPERTY CHANGE: Adding Views property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding Welcome property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding Activation property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding Shared property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding License property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding Home property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding EditorTemplates property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding Scripts property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding Images property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Images\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding Content property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Content\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding bin property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\bin\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding WebRoot property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding binFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\bin\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding ClientBinFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding FeedsFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding ServiceFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Services\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding TempStorage.Folder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding ImagesFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Images\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding DownloadFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Download\'.
MSI (s) (98:28) [16:54:59:371]: PROPERTY CHANGE: Adding CommonFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Common\'.
MSI (s) (98:28) [16:54:59:371]: Target path resolution complete. Dumping Directory table...
MSI (s) (98:28) [16:54:59:371]: Note: target paths subject to change (via custom actions or browsing)
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: TARGETDIR    , Object: C:\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: WindowsFolder    , Object: C:\Windows\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: ProgramMenuFolder    , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: ProgramTelerikDir    , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: ProgramMenuDir   , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: ProgramFilesFolder   , Object: C:\Program Files\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: TelerikFolder    , Object: C:\Program Files\Telerik\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: INSTALLLOCATION  , Object: C:\Program Files\Telerik\TeamPulse\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: logs.Folder  , Object: C:\Program Files\Telerik\TeamPulse\Logs\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: IntegrationService   , Object: C:\Program Files\Telerik\TeamPulse\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: Release  , Object: C:\Program Files\Telerik\TeamPulse\IntegrationService\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: MappingDefaults  , Object: C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: UserManagementRoot   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: Views    , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: Welcome  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: Activation   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: Shared   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: License  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: Home , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: EditorTemplates  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: Scripts  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: Images   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Images\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: Content  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Content\
MSI (s) (98:28) [16:54:59:371]: Dir (target): Key: bin  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\bin\
MSI (s) (98:28) [16:54:59:372]: Dir (target): Key: WebRoot  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\
MSI (s) (98:28) [16:54:59:372]: Dir (target): Key: binFolder    , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\bin\
MSI (s) (98:28) [16:54:59:372]: Dir (target): Key: ClientBinFolder  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\
MSI (s) (98:28) [16:54:59:372]: Dir (target): Key: FeedsFolder  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\
MSI (s) (98:28) [16:54:59:372]: Dir (target): Key: ServiceFolder    , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Services\
MSI (s) (98:28) [16:54:59:372]: Dir (target): Key: TempStorage.Folder   , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\
MSI (s) (98:28) [16:54:59:372]: Dir (target): Key: ImagesFolder , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Images\
MSI (s) (98:28) [16:54:59:372]: Dir (target): Key: DownloadFolder   , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Download\
MSI (s) (98:28) [16:54:59:372]: Dir (target): Key: CommonFolder , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Common\
MSI (s) (98:28) [16:54:59:372]: Note: 1: 2205 2:  3: MsiAssembly
MSI (s) (98:28) [16:54:59:372]: Note: 1: 2228 2:  3: MsiAssembly 4:  SELECT `MsiAssembly`.`Attributes`, `MsiAssembly`.`File_Application`, `MsiAssembly`.`File_Manifest`,  `Component`.`KeyPath` FROM `MsiAssembly`, `Component` WHERE  `MsiAssembly`.`Component_` = `Component`.`Component` AND `MsiAssembly`.`Component_` = ?
Action ended 16:54:59: CostFinalize. Return value 1.
MSI (s) (98:28) [16:54:59:374]: Doing action: InstallValidate
Action 16:54:59: InstallValidate. Validating install
Action start 16:54:59: InstallValidate.
MSI (s) (98:28) [16:54:59:375]: PROPERTY CHANGE: Deleting MsiRestartManagerSessionKey property. Its current value is '8c94f6dcb85eea4fb8d7cd401395d496'.
MSI (s) (98:28) [16:54:59:375]: Feature: ProductFeature; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (98:28) [16:54:59:375]: Component: AppRootFiles1; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: AppRootFiles2; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: MySite_root_Files; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: CommonFiles; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: DownloadFiles; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: ImageFiles; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: ServiceFiles; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: TempStorage.Component; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: FeedServiceFiles; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: ClientBinFiles; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: binFiles; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: WebSite_Config; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:375]: Component: WebSiteIIS6Config; Installed: Absent;   Request: Local;   Action: Null;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagementRootFiles; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagementConfigIIS6; Installed: Absent;   Request: Local;   Action: Null;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagementConfigIIS7; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagementBin; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagemetnContent; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagementImages; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagementScripts; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: Web.config_1; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagemntHome; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagemntHomeEditorTemplates; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagementLicense; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UsermanagementShared; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagementActivation; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: UserManagementWelcome; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: IntegrationServiceMain; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: TfsSyncMappingDefaults; Installed: Absent;   Request: Local;   Action: Null;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: logs.Component; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: TelerikMenuShortcuts; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: StartMenuShortcuts; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (98:28) [16:54:59:376]: Component: __TelerikMenuShortcuts65; Installed: Null;   Request: Local;   Action: Local;   Client State: Null
MSI (s) (98:28) [16:54:59:376]: Component: __StartMenuShortcuts65; Installed: Null;   Request: Local;   Action: Local;   Client State: Null
MSI (s) (98:28) [16:54:59:376]: Component: __MySite_root_Files65; Installed: Null;   Request: Local;   Action: Local;   Client State: Null
MSI (s) (98:28) [16:54:59:376]: Component: __AppRootFiles165; Installed: Null;   Request: Local;   Action: Local;   Client State: Null
MSI (s) (98:28) [16:54:59:376]: Component: __AppRootFiles265; Installed: Null;   Request: Local;   Action: Local;   Client State: Null
MSI (s) (98:28) [16:54:59:376]: Note: 1: 2205 2:  3: BindImage
MSI (s) (98:28) [16:54:59:376]: Note: 1: 2205 2:  3: ProgId
MSI (s) (98:28) [16:54:59:376]: Note: 1: 2205 2:  3: PublishComponent
MSI (s) (98:28) [16:54:59:376]: Note: 1: 2205 2:  3: SelfReg
MSI (s) (98:28) [16:54:59:376]: Note: 1: 2205 2:  3: Extension
MSI (s) (98:28) [16:54:59:376]: Note: 1: 2205 2:  3: Font
MSI (s) (98:28) [16:54:59:376]: Note: 1: 2205 2:  3: Class
MSI (c) (1C:B0) [16:54:59:376]: Note: 1: 2262 2: Billboard 3: -2147287038
MSI (s) (98:28) [16:54:59:377]: Note: 1: 2205 2:  3: _RemoveFilePath
MSI (s) (98:28) [16:54:59:402]: PROPERTY CHANGE: Modifying CostingComplete property. Its current value is '0'. Its new value: '1'.
MSI (s) (98:28) [16:54:59:402]: Note: 1: 2205 2:  3: BindImage
MSI (s) (98:28) [16:54:59:402]: Note: 1: 2205 2:  3: ProgId
MSI (s) (98:28) [16:54:59:402]: Note: 1: 2205 2:  3: PublishComponent
MSI (s) (98:28) [16:54:59:402]: Note: 1: 2205 2:  3: SelfReg
MSI (s) (98:28) [16:54:59:402]: Note: 1: 2205 2:  3: Extension
MSI (s) (98:28) [16:54:59:402]: Note: 1: 2205 2:  3: Font
MSI (s) (98:28) [16:54:59:402]: Note: 1: 2205 2:  3: Class
MSI (s) (98:28) [16:54:59:403]: Note: 1: 2727 2: 
MSI (s) (98:28) [16:54:59:407]: Note: 1: 2727 2: 
Action ended 16:54:59: InstallValidate. Return value 1.
MSI (s) (98:28) [16:54:59:408]: Doing action: RemoveExistingProducts
Action 16:54:59: RemoveExistingProducts. Removing applications
Action start 16:54:59: RemoveExistingProducts.
Action ended 16:54:59: RemoveExistingProducts. Return value 1.
MSI (s) (98:28) [16:54:59:411]: Doing action: InstallInitialize
Action 16:54:59: InstallInitialize.
Action start 16:54:59: InstallInitialize.
MSI (s) (98:28) [16:54:59:412]: Machine policy value 'AlwaysInstallElevated' is 0
MSI (s) (98:28) [16:54:59:412]: User policy value 'AlwaysInstallElevated' is 0
MSI (s) (98:28) [16:54:59:412]: BeginTransaction: Locking Server
MSI (s) (98:28) [16:54:59:413]: Note: 1: 1715 2: Telerik TeamPulse
MSI (s) (98:28) [16:54:59:413]: Calling SRSetRestorePoint API. dwRestorePtType: 0, dwEventType: 102, llSequenceNumber: 0, szDescription: "Installed Telerik TeamPulse".
MSI (s) (98:28) [16:54:59:413]: The call to SRSetRestorePoint API failed. Returned status: 0. GetLastError() returned: 127
MSI (s) (98:28) [16:54:59:413]: Server not locked: locking for product {02E84302-F860-462A-BF16-FE2D92A4A06A}
Action ended 16:54:59: InstallInitialize. Return value 1.
MSI (s) (98:28) [16:54:59:656]: Doing action: ProcessComponents
Action 16:54:59: ProcessComponents. Updating component registration
Action start 16:54:59: ProcessComponents.
MSI (s) (98:28) [16:54:59:658]: Note: 1: 2205 2:  3: MsiPatchCertificate
MSI (s) (98:28) [16:54:59:658]: LUA patching is disabled: missing MsiPatchCertificate table
MSI (s) (98:28) [16:54:59:658]: Resolving source.
MSI (s) (98:28) [16:54:59:658]: Resolving source to launched-from source.
MSI (s) (98:28) [16:54:59:658]: Setting launched-from source as last-used.
MSI (s) (98:28) [16:54:59:659]: PROPERTY CHANGE: Adding SourceDir property. Its value is 'C:\'.
MSI (s) (98:28) [16:54:59:659]: PROPERTY CHANGE: Adding SOURCEDIR property. Its value is 'C:\'.
MSI (s) (98:28) [16:54:59:659]: PROPERTY CHANGE: Adding SourcedirProduct property. Its value is '{02E84302-F860-462A-BF16-FE2D92A4A06A}'.
MSI (s) (98:28) [16:54:59:659]: SOURCEDIR ==> C:\
MSI (s) (98:28) [16:54:59:659]: SOURCEDIR product ==> {02E84302-F860-462A-BF16-FE2D92A4A06A}
MSI (s) (98:28) [16:54:59:659]: Determining source type
MSI (s) (98:28) [16:54:59:659]: Source type from package 'Telerik_TeamPulse_CommunityEdition_Q3_2010.msi': 2
MSI (s) (98:28) [16:54:59:659]: Source path resolution complete. Dumping Directory table...
MSI (s) (98:28) [16:54:59:659]: Dir (source): Key: TARGETDIR    , Object: C:\   , LongSubPath:  , ShortSubPath:
MSI (s) (98:28) [16:54:59:659]: Dir (source): Key: WindowsFolder    , Object: C:\   , LongSubPath:  , ShortSubPath:
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: ProgramMenuFolder    , Object: C:\   , LongSubPath:  , ShortSubPath:
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: ProgramTelerikDir    , Object: C:\   , LongSubPath: Telerik\ , ShortSubPath:
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: ProgramMenuDir   , Object: C:\   , LongSubPath: Telerik\TeamPulse\   , ShortSubPath: Telerik\sbxrd0kv\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: ProgramFilesFolder   , Object: C:\   , LongSubPath:  , ShortSubPath:
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: TelerikFolder    , Object: C:\   , LongSubPath: Telerik\ , ShortSubPath:
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: INSTALLLOCATION  , Object: C:\   , LongSubPath: Telerik\TeamPulse\   , ShortSubPath: Telerik\lsx7_81t\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: logs.Folder  , Object: C:\   , LongSubPath: Telerik\TeamPulse\Logs\  , ShortSubPath: Telerik\lsx7_81t\Logs\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: IntegrationService   , Object: C:\   , LongSubPath: Telerik\TeamPulse\   , ShortSubPath: Telerik\lsx7_81t\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: Release  , Object: C:\   , LongSubPath: Telerik\TeamPulse\IntegrationService\    , ShortSubPath: Telerik\lsx7_81t\5c8fgzot\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: MappingDefaults  , Object: C:\   , LongSubPath: Telerik\TeamPulse\IntegrationService\MappingDefaults\    , ShortSubPath: Telerik\lsx7_81t\5c8fgzot\vt4o93le\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: UserManagementRoot   , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\    , ShortSubPath: Telerik\lsx7_81t\snusbtlo\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: Views    , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\  , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: Welcome  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\Welcome\  , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\Welcome\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: Activation   , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\Activation\   , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\rlik-iha\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: Shared   , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\Shared\   , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\Shared\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: License  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\License\  , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\License\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: Home , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\Home\ , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\Home\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: EditorTemplates  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\ , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\Home\ayne0dx-\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: Scripts  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Scripts\    , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Scripts\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: Images   , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Images\ , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Images\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: Content  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Content\    , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Content\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: bin  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\bin\    , ShortSubPath: Telerik\lsx7_81t\snusbtlo\bin\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: WebRoot  , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\   , ShortSubPath: Telerik\lsx7_81t\wwwroot\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: binFolder    , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\bin\   , ShortSubPath: Telerik\lsx7_81t\wwwroot\bin\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: ClientBinFolder  , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\ClientBin\ , ShortSubPath: Telerik\lsx7_81t\wwwroot\9jnayfvp\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: FeedsFolder  , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Feeds\ , ShortSubPath: Telerik\lsx7_81t\wwwroot\Feeds\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: ServiceFolder    , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Services\  , ShortSubPath: Telerik\lsx7_81t\wwwroot\Services\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: TempStorage.Folder   , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Services\TempStorage\  , ShortSubPath: Telerik\lsx7_81t\wwwroot\Services\_zr9-3y4\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: ImagesFolder , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Images\    , ShortSubPath: Telerik\lsx7_81t\wwwroot\Images\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: DownloadFolder   , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Download\  , ShortSubPath: Telerik\lsx7_81t\wwwroot\Download\
MSI (s) (98:28) [16:54:59:660]: Dir (source): Key: CommonFolder , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Common\    , ShortSubPath: Telerik\lsx7_81t\wwwroot\Common\
Action 16:54:59: GenerateScript. Generating script operations for action:
GenerateScript: Updating component registration
Action ended 16:54:59: ProcessComponents. Return value 1.
MSI (s) (98:28) [16:54:59:692]: Doing action: UnpublishFeatures
Action 16:54:59: UnpublishFeatures. Unpublishing Product Features
Action start 16:54:59: UnpublishFeatures.
Action ended 16:54:59: UnpublishFeatures. Return value 1.
MSI (s) (98:28) [16:54:59:694]: Doing action: SchedSecureObjectsRollback
Action 16:54:59: SchedSecureObjectsRollback.
Action start 16:54:59: SchedSecureObjectsRollback.
MSI (s) (98:28) [16:54:59:699]: Creating MSIHANDLE (154) of type 790542 for thread 1832
MSI (s) (98:0C) [16:54:59:699]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI528A.tmp, Entrypoint: SchedSecureObjectsRollback
MSI (s) (98:D4) [16:54:59:699]: Generating random cookie.
MSI (s) (98:D4) [16:54:59:710]: Created Custom Action Server with PID 3580 (0xDFC).
MSI (s) (98:D8) [16:54:59:740]: Running as a service.
MSI (s) (98:D8) [16:54:59:742]: Hello, I'm your 32bit Impersonated custom action server.
MSI (s) (98!18) [16:54:59:747]: Creating MSIHANDLE (155) of type 790541 for thread 792
MSI (s) (98!18) [16:54:59:748]: Creating MSIHANDLE (156) of type 790540 for thread 792
MSI (s) (98!18) [16:54:59:748]: Creating MSIHANDLE (157) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:749]: Creating MSIHANDLE (158) of type 790531 for thread 792
SchedSecureObjectsRollback:  Failed to store ACL rollback information with error 0x80070003 - continuing
MSI (s) (98!18) [16:54:59:750]: Closing MSIHANDLE (158) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:750]: Closing MSIHANDLE (157) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:750]: Creating MSIHANDLE (159) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:751]: PROPERTY CHANGE: Adding ExecSecureObjectsRollback property. Its value is 'C:\Program Files\Telerik\TeamPulse\Logs\€CreateFolder€D:AI(A;;0x17019f;;;WD)(A;OICIIO;DCLCSDWDGWGR;;;WD)(A;ID;FA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;CIIOID;GA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;ID;FA;;;SY)(A;OICIIOID;GA;;;SY)(A;ID;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;0x1200a9;;;BU)(A;OICIIOID;GXGR;;;BU)(A;OICIIOID;GA;;;CO)€0'.
MSI (s) (98!18) [16:54:59:751]: Creating MSIHANDLE (160) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:752]: Closing MSIHANDLE (160) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:752]: Doing action: ExecSecureObjectsRollback
Action 16:54:59: ExecSecureObjectsRollback.
Action start 16:54:59: ExecSecureObjectsRollback.
ExecSecureObjectsRollback:
Action ended 16:54:59: ExecSecureObjectsRollback. Return value 1.
MSI (s) (98!18) [16:54:59:756]: Closing MSIHANDLE (159) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:756]: Creating MSIHANDLE (161) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:756]: Creating MSIHANDLE (162) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:757]: Closing MSIHANDLE (162) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:757]: Creating MSIHANDLE (163) of type 790540 for thread 792
MSI (s) (98!18) [16:54:59:757]: Creating MSIHANDLE (164) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:757]: Creating MSIHANDLE (165) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:757]: Creating MSIHANDLE (166) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:757]: Closing MSIHANDLE (166) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:757]: Closing MSIHANDLE (164) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:757]: Closing MSIHANDLE (165) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:758]: Closing MSIHANDLE (163) of type 790540 for thread 792
MSI (s) (98!18) [16:54:59:758]: Creating MSIHANDLE (167) of type 790531 for thread 792
SchedSecureObjectsRollback:  Failed to store ACL rollback information with error 0x80070424 - continuing
MSI (s) (98!18) [16:54:59:759]: Closing MSIHANDLE (167) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:759]: Closing MSIHANDLE (161) of type 790531 for thread 792
MSI (s) (98!18) [16:54:59:759]: Closing MSIHANDLE (155) of type 790541 for thread 792
MSI (s) (98!18) [16:54:59:759]: Closing MSIHANDLE (156) of type 790540 for thread 792
MSI (s) (98:0C) [16:54:59:759]: Closing MSIHANDLE (154) of type 790542 for thread 1832
Action ended 16:54:59: SchedSecureObjectsRollback. Return value 1.
MSI (s) (98:28) [16:54:59:760]: Doing action: ConfigureTeamPulseWebSites.SetProperty
Action 16:54:59: ConfigureTeamPulseWebSites.SetProperty.
Action start 16:54:59: ConfigureTeamPulseWebSites.SetProperty.
MSI (s) (98:28) [16:54:59:762]: PROPERTY CHANGE: Adding ConfigureTeamPulseWebSites property. Its value is 'SystemFolder=C:\Windows\system32\;INSTALLDIR=C:\Program Files\Telerik\TeamPulse\;NETFRAMEWORK40=C:\Windows\Microsoft.NET\Framework\v4.0.30319\'.
Action ended 16:54:59: ConfigureTeamPulseWebSites.SetProperty. Return value 1.
MSI (s) (98:28) [16:54:59:763]: Doing action: CleanupExistingApplicationPool.SetProperty
Action 16:54:59: CleanupExistingApplicationPool.SetProperty.
Action start 16:54:59: CleanupExistingApplicationPool.SetProperty.
MSI (s) (98:28) [16:54:59:764]: PROPERTY CHANGE: Adding CleanupExistingApplicationPool property. Its value is 'SystemFolder=C:\Windows\system32\'.
Action ended 16:54:59: CleanupExistingApplicationPool.SetProperty. Return value 1.
MSI (s) (98:28) [16:54:59:765]: Doing action: CleanupExistingTeampulseSite.SetProperty
Action 16:54:59: CleanupExistingTeampulseSite.SetProperty.
Action start 16:54:59: CleanupExistingTeampulseSite.SetProperty.
MSI (s) (98:28) [16:54:59:766]: PROPERTY CHANGE: Adding CleanupExistingTeampulseSite property. Its value is 'SystemFolder=C:\Windows\system32\'.
Action ended 16:54:59: CleanupExistingTeampulseSite.SetProperty. Return value 1.
MSI (s) (98:28) [16:54:59:767]: Doing action: CleanupExistingUserManagementSite.SetProperty
Action 16:54:59: CleanupExistingUserManagementSite.SetProperty.
Action start 16:54:59: CleanupExistingUserManagementSite.SetProperty.
MSI (s) (98:28) [16:54:59:769]: PROPERTY CHANGE: Adding CleanupExistingUserManagementSite property. Its value is 'SystemFolder=C:\Windows\system32\'.
Action ended 16:54:59: CleanupExistingUserManagementSite.SetProperty. Return value 1.
MSI (s) (98:28) [16:54:59:769]: Doing action: FixupIIS.SetProperty
Action 16:54:59: FixupIIS.SetProperty.
Action start 16:54:59: FixupIIS.SetProperty.
MSI (s) (98:28) [16:54:59:771]: PROPERTY CHANGE: Adding FixupIIS property. Its value is 'SystemFolder=C:\Windows\system32\;INSTALLDIR=C:\Program Files\Telerik\TeamPulse\;NETFRAMEWORK40=C:\Windows\Microsoft.NET\Framework\v4.0.30319\'.
Action ended 16:54:59: FixupIIS.SetProperty. Return value 1.
MSI (s) (98:28) [16:54:59:771]: Doing action: CreateApplicationPool.SetProperty
Action 16:54:59: CreateApplicationPool.SetProperty.
Action start 16:54:59: CreateApplicationPool.SetProperty.
MSI (s) (98:28) [16:54:59:773]: PROPERTY CHANGE: Adding CreateApplicationPool property. Its value is '**********'.
Action ended 16:54:59: CreateApplicationPool.SetProperty. Return value 1.
MSI (s) (98:28) [16:54:59:774]: Doing action: RegisterNamespaces.SetProperty
Action 16:54:59: RegisterNamespaces.SetProperty.
Action start 16:54:59: RegisterNamespaces.SetProperty.
MSI (s) (98:28) [16:54:59:775]: PROPERTY CHANGE: Adding RegisterNamespaces property. Its value is 'DB_DOMAIN=BUMBLEBEE;DB_USERNAME=Administrator;NETSH=C:\Windows\system32\Netsh.exe'.
Action ended 16:54:59: RegisterNamespaces.SetProperty. Return value 1.
MSI (s) (98:28) [16:54:59:776]: Doing action: UnregisterNamespaces.SetProperty
Action 16:54:59: UnregisterNamespaces.SetProperty.
Action start 16:54:59: UnregisterNamespaces.SetProperty.
MSI (s) (98:28) [16:54:59:778]: PROPERTY CHANGE: Adding UnregisterNamespaces property. Its value is 'NETSH=C:\Windows\system32\Netsh.exe'.
Action ended 16:54:59: UnregisterNamespaces.SetProperty. Return value 1.
MSI (s) (98:28) [16:54:59:778]: Doing action: CleanupExistingTeampulseSite
Action 16:54:59: CleanupExistingTeampulseSite.
Action start 16:54:59: CleanupExistingTeampulseSite.
CleanupExistingTeampulseSite:
Action ended 16:54:59: CleanupExistingTeampulseSite. Return value 1.
MSI (s) (98:28) [16:54:59:788]: Doing action: CleanupExistingUserManagementSite
Action 16:54:59: CleanupExistingUserManagementSite.
Action start 16:54:59: CleanupExistingUserManagementSite.
CleanupExistingUserManagementSite:
Action ended 16:54:59: CleanupExistingUserManagementSite. Return value 1.
MSI (s) (98:28) [16:54:59:797]: Doing action: CleanupExistingApplicationPool
Action 16:54:59: CleanupExistingApplicationPool.
Action start 16:54:59: CleanupExistingApplicationPool.
CleanupExistingApplicationPool:
Action ended 16:54:59: CleanupExistingApplicationPool. Return value 1.
MSI (s) (98:28) [16:54:59:807]: Doing action: FixupIIS
Action 16:54:59: FixupIIS.
Action start 16:54:59: FixupIIS.
FixupIIS:
Action ended 16:54:59: FixupIIS. Return value 1.
MSI (s) (98:28) [16:54:59:816]: Doing action: StopServices
Action 16:54:59: StopServices. Stopping services
Action start 16:54:59: StopServices.
StopServices: Service: Stopping services
Action ended 16:54:59: StopServices. Return value 1.
MSI (s) (98:28) [16:54:59:819]: Doing action: DeleteServices
Action 16:54:59: DeleteServices. Deleting services
Action start 16:54:59: DeleteServices.
DeleteServices: Service: Deleting services
Action ended 16:54:59: DeleteServices. Return value 1.
MSI (s) (98:28) [16:54:59:821]: Doing action: RemoveRegistryValues
Action 16:54:59: RemoveRegistryValues. Removing system registry values
Action start 16:54:59: RemoveRegistryValues.
Action ended 16:54:59: RemoveRegistryValues. Return value 1.
MSI (s) (98:28) [16:54:59:824]: Doing action: RemoveShortcuts
Action 16:54:59: RemoveShortcuts. Removing shortcuts
Action start 16:54:59: RemoveShortcuts.
Action ended 16:54:59: RemoveShortcuts. Return value 1.
MSI (s) (98:28) [16:54:59:826]: Doing action: UnregisterNamespaces
Action 16:54:59: UnregisterNamespaces.
Action start 16:54:59: UnregisterNamespaces.
UnregisterNamespaces:
Action ended 16:54:59: UnregisterNamespaces. Return value 1.
MSI (s) (98:28) [16:54:59:834]: Doing action: RemoveFiles
Action 16:54:59: RemoveFiles. Removing files
Action start 16:54:59: RemoveFiles.
Action ended 16:54:59: RemoveFiles. Return value 1.
MSI (s) (98:28) [16:54:59:837]: Doing action: RemoveFolders
Action 16:54:59: RemoveFolders. Removing folders
Action start 16:54:59: RemoveFolders.
Action ended 16:54:59: RemoveFolders. Return value 1.
MSI (s) (98:28) [16:54:59:838]: Doing action: CreateFolders
Action 16:54:59: CreateFolders. Creating folders
Action start 16:54:59: CreateFolders.
CreateFolders: Folder: Creating folders
Action ended 16:54:59: CreateFolders. Return value 1.
MSI (s) (98:28) [16:54:59:841]: Doing action: ConfigureUsers
Action 16:54:59: ConfigureUsers.
Action start 16:54:59: ConfigureUsers.
MSI (s) (98:28) [16:54:59:846]: Creating MSIHANDLE (168) of type 790542 for thread 1832
MSI (s) (98:F8) [16:54:59:846]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI5327.tmp, Entrypoint: ConfigureUsers
MSI (s) (98:D8) [16:54:59:852]: Creating MSIHANDLE (169) of type 790541 for thread 1240
MSI (s) (98:D8) [16:54:59:853]: Creating MSIHANDLE (170) of type 790531 for thread 1240
MSI (s) (98:D8) [16:54:59:853]: Closing MSIHANDLE (170) of type 790531 for thread 1240
MSI (s) (98:D8) [16:54:59:854]: Creating MSIHANDLE (171) of type 790540 for thread 1240
MSI (s) (98:D8) [16:54:59:854]: Creating MSIHANDLE (172) of type 790531 for thread 1240
MSI (s) (98:D8) [16:54:59:855]: Creating MSIHANDLE (173) of type 790531 for thread 1240
MSI (s) (98:D8) [16:54:59:855]: Closing MSIHANDLE (173) of type 790531 for thread 1240
MSI (s) (98:D8) [16:54:59:855]: Closing MSIHANDLE (172) of type 790531 for thread 1240
MSI (s) (98:D8) [16:54:59:856]: Closing MSIHANDLE (171) of type 790540 for thread 1240
MSI (s) (98:D8) [16:55:00:038]: PROPERTY CHANGE: Modifying CreateUser property. Its current value is '**********'. Its new value: '**********'.
MSI (s) (98:D8) [16:55:00:038]: Creating MSIHANDLE (174) of type 790531 for thread 1240
MSI (s) (98:D8) [16:55:00:039]: Closing MSIHANDLE (174) of type 790531 for thread 1240
MSI (s) (98:D8) [16:55:00:039]: Doing action: CreateUser
Action 16:55:00: CreateUser.
Action start 16:55:00: CreateUser.
CreateUser:
Action ended 16:55:00: CreateUser. Return value 1.
MSI (s) (98:D8) [16:55:00:044]: Closing MSIHANDLE (169) of type 790541 for thread 1240
MSI (s) (98:F8) [16:55:00:044]: Closing MSIHANDLE (168) of type 790542 for thread 1832
Action ended 16:55:00: ConfigureUsers. Return value 1.
MSI (s) (98:28) [16:55:00:045]: Doing action: InstallFiles
Action 16:55:00: InstallFiles. Copying new files
Action start 16:55:00: InstallFiles.
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'TeamPulse.url' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'UserManagement.url' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'MySite_Default_aspx' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'Common1' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'Download1' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'Image1' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'Service1' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'Feed1' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'TeamPulse.Client.xap' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'MainAssembly' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'Global.asax' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'um.log4net.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:047]: The file represented by File table key 'Site.css' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'Delete.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'script.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'Web.config_1' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'Create.aspx' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'SoleMemberProjectRow.ascx' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'Index.aspx_1' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'Error.aspx' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'ActivationIndex' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'WelcomeIndex' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'Integration.Service.exe' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'MySite_MediaTypes_xml' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'MySite_Web_Config' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'TeamPulse.Core' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'SilverlightJS' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'ClientAccessPolicy' has no eligible binary patches
MSI (s) (98:28) [16:55:00:048]: The file represented by File table key 'SplashScreen.xaml' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'SplashScreen.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'favicon.ico' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'TeamPulse.ico' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'BrowserHistoryScript.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'Common2' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'Common3' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'bg.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'Image2' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'Image3' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'Service2' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'Service3' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'Service4' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'Service5' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'Service6' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'Service7' has no eligible binary patches
MSI (s) (98:28) [16:55:00:049]: The file represented by File table key 'Feed2' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'TeamPulse.Client' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'Telerik.Web.UI' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'Telerik.Licensing' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'TeamPulse.Shared.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'TeamPulse.Shared.FullFramework.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'TeamPulse.Reporting.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'log4net' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'log4net.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'TeamPulse.Server.Licensing' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'Telerik.Windows.RadUploadHandler' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'Web.config' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'umfavicon.ico' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'UserManagement.ico' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'System.Data.Linq.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'System.Web.Mvc.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:050]: The file represented by File table key 'System.Web.Mvc.xml' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'TeamPulse.Core.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'TeamPulse.Server.Licensing.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'TeamPulse.UserManagement.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'TeamPulse.Shared.FullFramework' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'Telerik.Licensing.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'WelcomeScreens.css' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'Edit.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'logo.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'bgFade.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'bgWelcome.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'box_icon.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'btn_blog_s1.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'btn_blog_s2.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'btn_documentation_s1.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'btn_documentation_s2.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:051]: The file represented by File table key 'btn_forums_s1.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'btn_forums_s2.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'btn_kb_s1.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'btn_kb_s2.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'btn_supportTicket_s1.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'btn_supportTicket_s2.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'btn_video_s1.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'btn_video_s2.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'greyLine.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'launchTeamPulse_s1.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'launchTeamPulse_s2.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'launchUserManagement_s1.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'launchUserManagement_s2.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'purchase_s1.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'purchase_s2.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'BannerCommunity.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'BannerStandard.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:052]: The file represented by File table key 'IconActivate.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'IconLaunchTeamPulse.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'IconUserManagement.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'LogoCommunity.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'Ok_48.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'redgreyline.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'StandardBg.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'White.png' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'jquery_1.3.2_vsdoc.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'jquery_1.3.2.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'jquery_1.3.2.min.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'jquery.validate_vsdoc.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'jquery.validate.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'jquery.validate.min.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'MicrosoftAjax.debug.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'MicrosoftAjax.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:053]: The file represented by File table key 'MicrosoftMvcAjax.debug.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'MicrosoftMvcAjax.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'MicrosoftMvcJQueryValidation.js' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'Delete.aspx' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'Edit.aspx' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'Index.aspx' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'LicenseInfo.ascx' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'Site.Master' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'ActivationDelete' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'WelcomeIndexCommunity' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'ClientAccessPolicy.xml' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'Microsoft.Practices.Composite.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'Microsoft.Practices.ServiceLocation.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'Microsoft.Practices.Unity.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'Microsoft.WindowsAzure.StorageClient.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'int.TeamPulse.Core.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'Integration.Common.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:054]: The file represented by File table key 'Integration.Core.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:055]: The file represented by File table key 'Integration.Service.exe.config' has no eligible binary patches
MSI (s) (98:28) [16:55:00:055]: The file represented by File table key 'Integration.TeamFoundationServer.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:055]: The file represented by File table key 'Reporting.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:055]: The file represented by File table key 'Shared.FullFramework.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:055]: The file represented by File table key 'Telerik.Web.UI.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:055]: The file represented by File table key 'int.Telerik.Licensing.dll' has no eligible binary patches
MSI (s) (98:28) [16:55:00:055]: The file represented by File table key 'int.TeamPulse.Server.Licensing.dll' has no eligible binary patches
InstallFiles: File: Copying new files,  Directory: ,  Size:
MSI (s) (98:28) [16:55:00:056]: Note: 1: 2205 2:  3: Patch
MSI (s) (98:28) [16:55:00:056]: Note: 1: 2228 2:  3: Patch 4: SELECT `Patch`.`File_`, `Patch`.`Header`, `Patch`.`Attributes`, `Patch`.`Sequence`, `Patch`.`StreamRef_` FROM `Patch` WHERE `Patch`.`File_` = ? AND `Patch`.`#_MsiActive`=? ORDER BY `Patch`.`Sequence`
MSI (s) (98:28) [16:55:00:056]: Note: 1: 2205 2:  3: MsiSFCBypass
MSI (s) (98:28) [16:55:00:056]: Note: 1: 2228 2:  3: MsiSFCBypass 4: SELECT `File_` FROM `MsiSFCBypass` WHERE `File_` = ?
MSI (s) (98:28) [16:55:00:056]: Note: 1: 2205 2:  3: MsiPatchHeaders
MSI (s) (98:28) [16:55:00:056]: Note: 1: 2228 2:  3: MsiPatchHeaders 4: SELECT `Header` FROM `MsiPatchHeaders` WHERE `StreamRef` = ?
MSI (s) (98:28) [16:55:00:057]: Note: 1: 2205 2:  3: PatchPackage
MSI (s) (98:28) [16:55:00:057]: Note: 1: 2205 2:  3: MsiPatchHeaders
MSI (s) (98:28) [16:55:00:057]: Note: 1: 2205 2:  3: PatchPackage
Action ended 16:55:00: InstallFiles. Return value 1.
MSI (s) (98:28) [16:55:00:200]: Doing action: DuplicateFiles
Action 16:55:00: DuplicateFiles. Creating duplicate files
Action start 16:55:00: DuplicateFiles.
Action ended 16:55:00: DuplicateFiles. Return value 1.
MSI (s) (98:28) [16:55:00:202]: Doing action: SchedXmlFile
Action 16:55:00: SchedXmlFile.
Action start 16:55:00: SchedXmlFile.
MSI (s) (98:28) [16:55:00:206]: Creating MSIHANDLE (175) of type 790542 for thread 1832
MSI (s) (98:5C) [16:55:00:206]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI548F.tmp, Entrypoint: SchedXmlFile
MSI (s) (98!0C) [16:55:00:218]: Creating MSIHANDLE (176) of type 790541 for thread 2316
MSI (s) (98!0C) [16:55:00:219]: Creating MSIHANDLE (177) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:219]: Closing MSIHANDLE (177) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:219]: Creating MSIHANDLE (178) of type 790540 for thread 2316
MSI (s) (98!0C) [16:55:00:219]: Creating MSIHANDLE (179) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:220]: Creating MSIHANDLE (180) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:220]: Closing MSIHANDLE (180) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:220]: Creating MSIHANDLE (181) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:221]: Closing MSIHANDLE (181) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:221]: Creating MSIHANDLE (182) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:221]: Closing MSIHANDLE (182) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:221]: Closing MSIHANDLE (179) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:222]: Creating MSIHANDLE (183) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:222]: Creating MSIHANDLE (184) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:222]: Closing MSIHANDLE (184) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:223]: Creating MSIHANDLE (185) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:223]: Closing MSIHANDLE (185) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:223]: Creating MSIHANDLE (186) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:223]: Closing MSIHANDLE (186) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:223]: Closing MSIHANDLE (183) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:224]: Creating MSIHANDLE (187) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:224]: Creating MSIHANDLE (188) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:224]: Closing MSIHANDLE (188) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:225]: Creating MSIHANDLE (189) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:225]: Closing MSIHANDLE (189) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:225]: Creating MSIHANDLE (190) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:225]: Closing MSIHANDLE (190) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:226]: Closing MSIHANDLE (187) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:226]: Creating MSIHANDLE (191) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:226]: Creating MSIHANDLE (192) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:226]: Closing MSIHANDLE (192) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:226]: Creating MSIHANDLE (193) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:227]: Closing MSIHANDLE (193) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:227]: Creating MSIHANDLE (194) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:227]: Closing MSIHANDLE (194) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:227]: Closing MSIHANDLE (191) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:227]: Creating MSIHANDLE (195) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:228]: Creating MSIHANDLE (196) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:228]: Closing MSIHANDLE (196) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:228]: Creating MSIHANDLE (197) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:228]: Closing MSIHANDLE (197) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:229]: Creating MSIHANDLE (198) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:229]: Closing MSIHANDLE (198) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:229]: Closing MSIHANDLE (195) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:229]: Creating MSIHANDLE (199) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:230]: Creating MSIHANDLE (200) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:230]: Closing MSIHANDLE (200) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:230]: Creating MSIHANDLE (201) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:230]: Closing MSIHANDLE (201) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:231]: Creating MSIHANDLE (202) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:231]: Closing MSIHANDLE (202) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:231]: Closing MSIHANDLE (199) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:231]: Creating MSIHANDLE (203) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:231]: Creating MSIHANDLE (204) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:232]: Closing MSIHANDLE (204) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:232]: Creating MSIHANDLE (205) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:232]: Closing MSIHANDLE (205) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:232]: Creating MSIHANDLE (206) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:233]: Closing MSIHANDLE (206) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:233]: Closing MSIHANDLE (203) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:233]: Creating MSIHANDLE (207) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:233]: Creating MSIHANDLE (208) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:233]: Closing MSIHANDLE (208) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:234]: Creating MSIHANDLE (209) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:234]: Closing MSIHANDLE (209) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:234]: Creating MSIHANDLE (210) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:234]: Closing MSIHANDLE (210) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:235]: Closing MSIHANDLE (207) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:235]: Creating MSIHANDLE (211) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:235]: Creating MSIHANDLE (212) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:235]: Closing MSIHANDLE (212) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:236]: Creating MSIHANDLE (213) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:236]: Closing MSIHANDLE (213) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:236]: Creating MSIHANDLE (214) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:236]: Closing MSIHANDLE (214) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:236]: Closing MSIHANDLE (211) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:237]: Creating MSIHANDLE (215) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:237]: Creating MSIHANDLE (216) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:237]: Closing MSIHANDLE (216) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:237]: Creating MSIHANDLE (217) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:238]: Closing MSIHANDLE (217) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:238]: Creating MSIHANDLE (218) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:238]: Closing MSIHANDLE (218) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:238]: Closing MSIHANDLE (215) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:238]: Creating MSIHANDLE (219) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:239]: Creating MSIHANDLE (220) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:239]: Closing MSIHANDLE (220) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:239]: Creating MSIHANDLE (221) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:240]: Closing MSIHANDLE (221) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:240]: Creating MSIHANDLE (222) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:240]: Closing MSIHANDLE (222) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:240]: Closing MSIHANDLE (219) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:240]: Creating MSIHANDLE (223) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:241]: Creating MSIHANDLE (224) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:241]: Closing MSIHANDLE (224) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:241]: Creating MSIHANDLE (225) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:242]: Closing MSIHANDLE (225) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:242]: Creating MSIHANDLE (226) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:242]: Closing MSIHANDLE (226) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:242]: Closing MSIHANDLE (223) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:242]: Creating MSIHANDLE (227) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:243]: Creating MSIHANDLE (228) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:243]: Closing MSIHANDLE (228) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:243]: Creating MSIHANDLE (229) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:243]: Closing MSIHANDLE (229) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:243]: Creating MSIHANDLE (230) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:244]: Closing MSIHANDLE (230) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:244]: Closing MSIHANDLE (227) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:244]: Creating MSIHANDLE (231) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:244]: Creating MSIHANDLE (232) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:245]: Closing MSIHANDLE (232) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:245]: Creating MSIHANDLE (233) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:245]: Closing MSIHANDLE (233) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:245]: Creating MSIHANDLE (234) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:246]: Closing MSIHANDLE (234) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:246]: Closing MSIHANDLE (231) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:246]: Creating MSIHANDLE (235) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:246]: Creating MSIHANDLE (236) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:247]: Closing MSIHANDLE (236) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:247]: Creating MSIHANDLE (237) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:247]: Closing MSIHANDLE (237) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:247]: Creating MSIHANDLE (238) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:248]: Closing MSIHANDLE (238) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:248]: Closing MSIHANDLE (235) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:248]: Creating MSIHANDLE (239) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:248]: Creating MSIHANDLE (240) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:248]: Closing MSIHANDLE (240) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:249]: Creating MSIHANDLE (241) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:249]: Closing MSIHANDLE (241) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:249]: Creating MSIHANDLE (242) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:249]: Closing MSIHANDLE (242) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:250]: Closing MSIHANDLE (239) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:250]: Creating MSIHANDLE (243) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:250]: Creating MSIHANDLE (244) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:250]: Closing MSIHANDLE (244) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:251]: Creating MSIHANDLE (245) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:251]: Closing MSIHANDLE (245) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:251]: Creating MSIHANDLE (246) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:252]: Closing MSIHANDLE (246) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:252]: Closing MSIHANDLE (243) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:252]: Creating MSIHANDLE (247) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:252]: Creating MSIHANDLE (248) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:252]: Closing MSIHANDLE (248) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:253]: Creating MSIHANDLE (249) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:253]: Closing MSIHANDLE (249) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:253]: Creating MSIHANDLE (250) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:253]: Closing MSIHANDLE (250) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:254]: Closing MSIHANDLE (247) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:254]: Creating MSIHANDLE (251) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:254]: Creating MSIHANDLE (252) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:254]: Closing MSIHANDLE (252) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:255]: Creating MSIHANDLE (253) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:255]: Closing MSIHANDLE (253) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:255]: Creating MSIHANDLE (254) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:255]: Closing MSIHANDLE (254) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:255]: Closing MSIHANDLE (251) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:255]: Creating MSIHANDLE (255) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:256]: Creating MSIHANDLE (256) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:256]: Closing MSIHANDLE (256) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:256]: Creating MSIHANDLE (257) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:257]: Closing MSIHANDLE (257) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:257]: Creating MSIHANDLE (258) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:257]: Closing MSIHANDLE (258) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:257]: Closing MSIHANDLE (255) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:258]: Creating MSIHANDLE (259) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:258]: Creating MSIHANDLE (260) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:258]: Closing MSIHANDLE (260) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:258]: Creating MSIHANDLE (261) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:259]: Closing MSIHANDLE (261) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:259]: Creating MSIHANDLE (262) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:259]: Closing MSIHANDLE (262) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:259]: Closing MSIHANDLE (259) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:259]: Creating MSIHANDLE (263) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:260]: Creating MSIHANDLE (264) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:260]: Closing MSIHANDLE (264) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:260]: Creating MSIHANDLE (265) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:260]: Closing MSIHANDLE (265) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:261]: Creating MSIHANDLE (266) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:261]: Closing MSIHANDLE (266) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:261]: Closing MSIHANDLE (263) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:261]: Creating MSIHANDLE (267) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:261]: Creating MSIHANDLE (268) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:262]: Closing MSIHANDLE (268) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:262]: Creating MSIHANDLE (269) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:262]: Closing MSIHANDLE (269) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:263]: Creating MSIHANDLE (270) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:263]: Closing MSIHANDLE (270) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:263]: Closing MSIHANDLE (267) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:263]: Creating MSIHANDLE (271) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:263]: Creating MSIHANDLE (272) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:264]: Closing MSIHANDLE (272) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:264]: Creating MSIHANDLE (273) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:264]: Closing MSIHANDLE (273) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:264]: Creating MSIHANDLE (274) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:265]: Closing MSIHANDLE (274) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:265]: Closing MSIHANDLE (271) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:265]: Creating MSIHANDLE (275) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:265]: Creating MSIHANDLE (276) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:265]: Closing MSIHANDLE (276) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:266]: Creating MSIHANDLE (277) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:266]: Closing MSIHANDLE (277) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:266]: Creating MSIHANDLE (278) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:266]: Closing MSIHANDLE (278) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:267]: Closing MSIHANDLE (275) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:267]: Creating MSIHANDLE (279) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:267]: Creating MSIHANDLE (280) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:267]: Closing MSIHANDLE (280) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:268]: Creating MSIHANDLE (281) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:268]: Closing MSIHANDLE (281) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:268]: Creating MSIHANDLE (282) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:268]: Closing MSIHANDLE (282) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:269]: Closing MSIHANDLE (279) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:269]: Creating MSIHANDLE (283) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:269]: Creating MSIHANDLE (284) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:269]: Closing MSIHANDLE (284) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:269]: Creating MSIHANDLE (285) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:270]: Closing MSIHANDLE (285) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:270]: Creating MSIHANDLE (286) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:270]: Closing MSIHANDLE (286) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:270]: Closing MSIHANDLE (283) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:270]: Closing MSIHANDLE (178) of type 790540 for thread 2316
MSI (s) (98!0C) [16:55:00:272]: PROPERTY CHANGE: Adding ExecXmlFile property. Its value is '1€1€C:\Program Files\Telerik\TeamPulse\wwwroot\Web.Config€3€0€/configuration/connectionStrings/add[@name='TeamPulse.Core.Properties.Settings.TeamPulseConnectionString']/@connectionString€€server=BUMBLEBEE;Integrated Security=true;DATABASE=TeamPulse€3€0€/configuration/appSettings/add[@key='CompanyLicenseName']/@value€€TeamPulse€3€0€/configuration/appSettings/add[@key='MachineID']/@value€€o2BV4oz2NF2wnV8hSX4wFBeOq8M5js6TKM1+I4sM1lE=€3€0€/configuration/appSettings/add[@key='UserManagementURL']/@value€€http://BUMBLEBEE:9897/€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Services.AuthorizationService']/endpoint/@bindingConfiguration€€windowsHttp€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Feeds.ChartFeed']/endpoint/@bindingConfiguration€€windowsRss€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Feeds.NewsFeed']/endpoint/@bindingConfiguration€€windowsRss€3€0€/configuration/system.se
MSI (s) (98!0C) [16:55:00:272]: Creating MSIHANDLE (287) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:273]: Closing MSIHANDLE (287) of type 790531 for thread 2316
MSI (s) (98!0C) [16:55:00:273]: Doing action: ExecXmlFile
Action 16:55:00: ExecXmlFile.
Action start 16:55:00: ExecXmlFile.
ExecXmlFile:
Action ended 16:55:00: ExecXmlFile. Return value 1.
MSI (s) (98!0C) [16:55:00:277]: Closing MSIHANDLE (176) of type 790541 for thread 2316
MSI (s) (98:5C) [16:55:00:278]: Closing MSIHANDLE (175) of type 790542 for thread 1832
Action ended 16:55:00: SchedXmlFile. Return value 1.
MSI (s) (98:28) [16:55:00:279]: Doing action: CreateShortcuts
Action 16:55:00: CreateShortcuts. Creating shortcuts
Action start 16:55:00: CreateShortcuts.
CreateShortcuts: Shortcut: Creating shortcuts
Action ended 16:55:00: CreateShortcuts. Return value 1.
MSI (s) (98:28) [16:55:00:283]: Doing action: WriteRegistryValues
Action 16:55:00: WriteRegistryValues. Writing system registry values
Action start 16:55:00: WriteRegistryValues.
WriteRegistryValues: Key: Writing system registry values, Name: , Value:
Action ended 16:55:00: WriteRegistryValues. Return value 1.
MSI (s) (98:28) [16:55:00:286]: Doing action: InstallODBC
Action 16:55:00: InstallODBC. Installing ODBC components
Action start 16:55:00: InstallODBC.
MSI (s) (98:28) [16:55:00:288]: Note: 1: 2711 2: ODBCDriverManager
MSI (s) (98:28) [16:55:00:288]: Note: 1: 2711 2: ODBCDriverManager64
MSI (s) (98:28) [16:55:00:288]: Note: 1: 2205 2:  3: ODBCDriver
MSI (s) (98:28) [16:55:00:288]: Note: 1: 2228 2:  3: ODBCDriver 4: SELECT `Driver`,`ComponentId`,`Description`,`RuntimeFlags`,`Directory_`,`FileName`,`File_Setup`,`Action` FROM `ODBCDriver`, `File`, `Component` WHERE `File_` = `File` AND `ODBCDriver`.`Component_` = `Component` AND (`Component`.`ActionRequest` = 1 OR `Component`.`ActionRequest` = 2) AND `BinaryType` = ?
MSI (s) (98:28) [16:55:00:289]: Note: 1: 2205 2:  3: ODBCDriver
MSI (s) (98:28) [16:55:00:289]: Note: 1: 2228 2:  3: ODBCDriver 4: SELECT `Driver`,`ComponentId`,`Description`,`RuntimeFlags`,`Directory_`,`FileName`,`File_Setup`,`Action` FROM `ODBCDriver`, `File`, `Component` WHERE `File_` = `File` AND `ODBCDriver`.`Component_` = `Component` AND (`Component`.`ActionRequest` = 1 OR `Component`.`ActionRequest` = 2) AND `BinaryType` = ?
MSI (s) (98:28) [16:55:00:289]: Note: 1: 2205 2:  3: ODBCTranslator
MSI (s) (98:28) [16:55:00:289]: Note: 1: 2228 2:  3: ODBCTranslator 4: SELECT `Translator`,`Component`.`ComponentId`,`Description`,`RuntimeFlags`,`Directory_`,`FileName`,`File_Setup`,`Action` FROM `ODBCTranslator`, `File`, `Component` WHERE `File_` = `File` AND `ODBCTranslator`.`Component_` = `Component` AND (`Component`.`ActionRequest` = 1 OR `Component`.`ActionRequest` = 2) AND `BinaryType` = ?
MSI (s) (98:28) [16:55:00:289]: Note: 1: 2205 2:  3: ODBCTranslator
MSI (s) (98:28) [16:55:00:289]: Note: 1: 2228 2:  3: ODBCTranslator 4: SELECT `Translator`,`Component`.`ComponentId`,`Description`,`RuntimeFlags`,`Directory_`,`FileName`,`File_Setup`,`Action` FROM `ODBCTranslator`, `File`, `Component` WHERE `File_` = `File` AND `ODBCTranslator`.`Component_` = `Component` AND (`Component`.`ActionRequest` = 1 OR `Component`.`ActionRequest` = 2) AND `BinaryType` = ?
MSI (s) (98:28) [16:55:00:289]: Note: 1: 2205 2:  3: ODBCDataSource
MSI (s) (98:28) [16:55:00:289]: Note: 1: 2228 2:  3: ODBCDataSource 4: SELECT `DataSource`,`ComponentId`,`DriverDescription`,`Description`,`Registration` FROM `ODBCDataSource`, `Component` WHERE `Component_` = `Component` AND (`Component`.`Action` = 1 OR `Component`.`Action` = 2) AND `BinaryType` = ?
MSI (s) (98:28) [16:55:00:289]: Note: 1: 2205 2:  3: ODBCDataSource
MSI (s) (98:28) [16:55:00:289]: Note: 1: 2228 2:  3: ODBCDataSource 4: SELECT `DataSource`,`ComponentId`,`DriverDescription`,`Description`,`Registration` FROM `ODBCDataSource`, `Component` WHERE `Component_` = `Component` AND (`Component`.`Action` = 1 OR `Component`.`Action` = 2) AND `BinaryType` = ?
Action ended 16:55:00: InstallODBC. Return value 0.
MSI (s) (98:28) [16:55:00:289]: Doing action: RunSQLScripts
Action 16:55:00: RunSQLScripts.
Action start 16:55:00: RunSQLScripts.
MSI (s) (98:28) [16:55:00:302]: Creating MSIHANDLE (288) of type 790542 for thread 1832
MSI (s) (98:10) [16:55:00:302]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI54EE.tmp, Entrypoint: RunSQLScripts
MSI (s) (98!34) [16:55:00:538]: Creating MSIHANDLE (289) of type 790531 for thread 2612
SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSI54EE.tmp-\
MSI (s) (98!34) [16:55:00:539]: Closing MSIHANDLE (289) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:00:611]: Creating MSIHANDLE (290) of type 790531 for thread 2612
SFXCA: Binding to CLR version v2.0.50727
MSI (s) (98!34) [16:55:00:612]: Closing MSIHANDLE (290) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:00:695]: Creating MSIHANDLE (291) of type 790531 for thread 2612
Calling custom action DatabaseExtensions!DatabaseExtensions.CustomActions.RunSQLScripts
MSI (s) (98!34) [16:55:00:700]: Closing MSIHANDLE (291) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:00:851]: Creating MSIHANDLE (292) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:00:854]: Creating MSIHANDLE (293) of type 790531 for thread 2612
Determining if database already exists with connection string <server=BUMBLEBEE;Integrated Security=true;DATABASE=master>, username <Administrator>, domain <BUMBLEBEE>
MSI (s) (98!34) [16:55:00:855]: Closing MSIHANDLE (293) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:00:932]: Creating MSIHANDLE (294) of type 790531 for thread 2612
Determining database version with connection string <server=BUMBLEBEE;Integrated Security=true;DATABASE=master>, username <Administrator>, domain <BUMBLEBEE>
MSI (s) (98!34) [16:55:00:933]: Closing MSIHANDLE (294) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:00:937]: Creating MSIHANDLE (295) of type 790531 for thread 2612
Found existing database, version '2010.2.727.0'
MSI (s) (98!34) [16:55:00:938]: Closing MSIHANDLE (295) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:00:977]: Creating MSIHANDLE (296) of type 790531 for thread 2612
Beginning installation transaction...
MSI (s) (98!34) [16:55:00:978]: Closing MSIHANDLE (296) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:00:979]: Creating MSIHANDLE (297) of type 790531 for thread 2612
Executing sql script BEGIN TRANSACTION TeamPulseInstallTrans on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
MSI (s) (98!34) [16:55:00:979]: Closing MSIHANDLE (297) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:00:999]: Creating MSIHANDLE (298) of type 790531 for thread 2612
Failed to execute sql, exception details: System.IO.FileLoadException: Could not load file or assembly 'Microsoft.SqlServer.BatchParser, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail. (Exception from HRESULT: 0x800736B1)
File name: 'Microsoft.SqlServer.BatchParser, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' ---> System.Runtime.InteropServices.COMException (0x800736B1): The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail. (Exception from HRESULT: 0x800736B1)
   at System.Reflection.Assembly._GetType(String name, Boolean throwOnError, Boolean ignoreCase)
   at System.Reflection.Assembly.GetType(String name, Boolean throwOnError)
   at Microsoft.SqlServer.Management.Common.ServerConnection.GetStatements(String query, ExecutionTypes executionType, Int32& statementsToReverse)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand)
   at DatabaseExtensions.CustomActions.ExecuteSQL(Session session, Server server, String sql)
 
 
MSI (s) (98!34) [16:55:01:000]: Closing MSIHANDLE (298) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:01:000]: PROPERTY CHANGE: Adding INSTALLERROR property. Its value is '**********'.
MSI (s) (98!34) [16:55:01:001]: Creating MSIHANDLE (299) of type 790531 for thread 2612
Running database script: 2010.2.916.0 - DatabaseExtensions.TeamPulse_2010_Q2_SP1_UpdateSchema.sql - Updating Database schema
MSI (s) (98!34) [16:55:01:001]: Closing MSIHANDLE (299) of type 790531 for thread 2612
Action 16:55:01: . Updating Database schema (2010.2.916.0)
MSI (s) (98!34) [16:55:01:004]: Creating MSIHANDLE (300) of type 790531 for thread 2612
Executing sql content DatabaseExtensions.TeamPulse_2010_Q2_SP1_UpdateSchema.sql on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
MSI (s) (98!34) [16:55:01:005]: Closing MSIHANDLE (300) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:01:006]: Creating MSIHANDLE (301) of type 790531 for thread 2612
Executing sql script USE
GO
 
/****** Object:  Trigger     Script Date: 08/09/2010 12:00:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'.'))
EXEC dbo.sp_executesql @statement = N'
CREATE trigger . on . instead of delete
AS
BEGIN
 
SET NOCOUNT ON;
 
BEGIN TRAN DeleteProject
 
DECLARE @ProjectIDToDelete INT
DECLARE @LastModifiedBy varchar(128)
DECLARE @LastModifiedSystemID int
 
Select @ProjectIDToDelete = deleted.ProjectID,
       @LastModifiedBy = deleted.LastModifiedBy,
       @LastModifiedSystemID = deleted.LastModifiedSystemID
from deleted
 
-- Disable all triggers (except this one)
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''#AllTriggers'') AND type in (N''U''))
    DROP TABLE #AllTriggers
 
SELECT T.Name as TrigName, o.Name as TabName, s.Name as SchemaName
INTO   #AllTriggers
FROM   sys.triggers T
       JOIN sys.objects o ON T.parent_Id = o.object_ID
       JOIN sys.schemas s ON o.schema_Id = s.Schema_ID
WHERE T.Name <> ''DeleteProject''
        
DECLARE TrigCurs Cursor    
FOR SELECT TrigName, TabName, SchemaName FROM #AllTriggers
OPEN TrigCurs
 
DECLARE @TrigName varchar(250), @TabName varchar(250), @SchameName VarChar(250), @cmd varchar(1000)
FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd = ''disable trigger  on .;''
    EXEC (@cmd)
    FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
END
 
-- Deleting Project data...
delete from AttachmentFile where ProjectID = @ProjectIDToDelete
delete from Attachment where ProjectID = @ProjectIDToDelete
delete from TestCase where ProjectID = @ProjectIDToDelete
delete from Task where ProjectID = @ProjectIDToDelete
delete from Hyperlink where ProjectID = @ProjectIDToDelete
delete from StoryPersona where ProjectID = @ProjectIDToDelete
delete from StoryRelationship where ProjectID = @ProjectIDToDelete
delete from StoryRichDescription where ProjectID = @ProjectIDToDelete
delete from Story where ProjectID = @ProjectIDToDelete
delete from SynchronizationError where ProjectID = @ProjectIDToDelete
delete from Area where ProjectID = @ProjectIDToDelete
delete from Iteration where ProjectID = @ProjectIDToDelete
delete from Timeline where ProjectID = @ProjectIDToDelete
delete from Persona where ProjectID = @ProjectIDToDelete
delete from ProjectUser where ProjectID = @ProjectIDToDelete
delete from ProjectSync where ProjectID = @ProjectIDToDelete
delete from ProjectTag where ProjectID = @ProjectIDToDelete
 
-- Enabling all triggers...
DECLARE TrigCurs2 Cursor
FOR SELECT TrigName, TabName, SchemaName from #AllTriggers
OPEN TrigCurs2
DECLARE @TrigName2 varchar(250), @TabName2 varchar(250), @SchameName2 VarChar(250), @cmd2 varchar(1000)
FETCH Next from TrigCurs2 into @TrigName2 , @TabName2 , @SchameName2
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd2 = ''enable trigger  on .;''
    EXEC (@cmd2)
    FETCH Next FROM TrigCurs2 INTO @TrigName2 , @TabName2 , @SchameName2
END
 
DROP TABLE #AllTriggers
 
-- Do the final project deletion after re-enabling the triggers
-- so that we get an audit record of the project deletion
delete from project where projectid = @ProjectIDToDelete
 
 
COMMIT TRAN DeleteProject
 
 
END
'
GO
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering .C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\...';
 
 
GO
ALTER TABLE .C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Area_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Area'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AreaID,ProjectID,Name,ParentID,Sequence,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AreaID,ProjectID,Name,ParentID,Sequence,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Area'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateArea ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Area'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.AreaID = t.AreaID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Attachment_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Attachment'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AttachmentID,ProjectID,ParentID,ParentTypeID,AttachmentName,Description,AttachmentSize,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AttachmentID,ProjectID,ParentID,ParentTypeID,AttachmentName,Description,AttachmentSize,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Attachment'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateAttachment ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Attachment'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.AttachmentID = t.AttachmentID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger AttachmentFile_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'AttachmentFile'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AttachmentFileID,AttachmentID,ProjectID,AttachmentFileData,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AttachmentFileID,AttachmentID,ProjectID,AttachmentFileData,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'AttachmentFile'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateAttachmentFile ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'AttachmentFile'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.AttachmentFileID = t.AttachmentFileID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Hyperlink_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Hyperlink'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select HyperlinkID,ProjectID,StoryID,DisplayText,URL,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select HyperlinkID,ProjectID,StoryID,DisplayText,URL,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Hyperlink'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateHyperlink ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Hyperlink'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.HyperlinkID = t.HyperlinkID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Iteration_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Iteration'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select IterationID,ProjectID,TimeLineID,CapacityMinimum,CapacityMaximum,EndDate,PredecessorID,ParentID,Level,StartDate,Name,SourceId,Sequence,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select IterationID,ProjectID,TimeLineID,CapacityMinimum,CapacityMaximum,EndDate,PredecessorID,ParentID,Level,StartDate,Name,SourceId,Sequence,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Iteration'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateIteration ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Iteration'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.IterationID = t.IterationID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger License_AuditTracking on C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\ for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'License'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select LicenseID,LicenseKey,ActivationKey,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select LicenseID,LicenseKey,ActivationKey,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'License'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateLicense ON C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\ AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'License'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\ t
        JOIN inserted i ON i.LicenseID = t.LicenseID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Persona_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Persona'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select PersonaID,ProjectID,FullName,RichDescription,Position,IconResourceName,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select PersonaID,ProjectID,FullName,RichDescription,Position,IconResourceName,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Persona'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdatePersona ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Persona'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.PersonaID = t.PersonaID
 
END
GO
PRINT N'Altering ....';
 
 
GO
ALTER trigger . on .
    instead of delete
AS
BEGIN
 
SET NOCOUNT ON;
 
BEGIN TRAN DeleteProject
 
DECLARE @ProjectIDToDelete INT
DECLARE @LastModifiedBy varchar(128)
DECLARE @LastModifiedSystemID int
 
Select @ProjectIDToDelete = deleted.ProjectID,
       @LastModifiedBy = deleted.LastModifiedBy,
       @LastModifiedSystemID = deleted.LastModifiedSystemID
from deleted
 
-- Disable all triggers (except this one)
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'#AllTriggers') AND type in (N'U'))
    DROP TABLE #AllTriggers
 
SELECT T.Name as TrigName, o.Name as TabName, s.Name as SchemaName
INTO   #AllTriggers
FROM   sys.triggers T
       JOIN sys.objects o ON T.parent_Id = o.object_ID
       JOIN sys.schemas s ON o.schema_Id = s.Schema_ID
WHERE T.Name <> 'DeleteProject'
        
DECLARE TrigCurs Cursor    
FOR SELECT TrigName, TabName, SchemaName FROM #AllTriggers
OPEN TrigCurs
 
DECLARE @TrigName varchar(250), @TabName varchar(250), @SchameName VarChar(250), @cmd varchar(1000)
FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd = 'disable trigger  on .;'
    EXEC (@cmd)
    FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
END
 
-- Deleting Project data...
delete from AttachmentFile where ProjectID = @ProjectIDToDelete
delete from Attachment where ProjectID = @ProjectIDToDelete
delete from TestCase where ProjectID = @ProjectIDToDelete
delete from Task where ProjectID = @ProjectIDToDelete
delete from Hyperlink where ProjectID = @ProjectIDToDelete
delete from StoryPersona where ProjectID = @ProjectIDToDelete
delete from StoryRelationship where ProjectID = @ProjectIDToDelete
delete from StoryRichDescription where ProjectID = @ProjectIDToDelete
delete from Story where ProjectID = @ProjectIDToDelete
delete from SynchronizationError where ProjectID = @ProjectIDToDelete
delete from Area where ProjectID = @ProjectIDToDelete
delete from Iteration where ProjectID = @ProjectIDToDelete
delete from Timeline where ProjectID = @ProjectIDToDelete
delete from Persona where ProjectID = @ProjectIDToDelete
delete from ProjectUser where ProjectID = @ProjectIDToDelete
delete from ProjectSync where ProjectID = @ProjectIDToDelete
delete from ProjectTag where ProjectID = @ProjectIDToDelete
 
-- Enabling all triggers...
DECLARE TrigCurs2 Cursor
FOR SELECT TrigName, TabName, SchemaName from #AllTriggers
OPEN TrigCurs2
DECLARE @TrigName2 varchar(250), @TabName2 varchar(250), @SchameName2 VarChar(250), @cmd2 varchar(1000)
FETCH Next from TrigCurs2 into @TrigName2 , @TabName2 , @SchameName2
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd2 = 'enable trigger  on .;'
    EXEC (@cmd2)
    FETCH Next FROM TrigCurs2 INTO @TrigName2 , @TabName2 , @SchameName2
END
 
DROP TABLE #AllTriggers
 
-- Do the final project deletion after re-enabling the triggers
-- so that we get an audit record of the project deletion
delete from project where projectid = @ProjectIDToDelete
 
 
COMMIT TRAN DeleteProject
 
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Project_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Project'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectID,Name,Description,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectID,Name,Description,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Project'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateProject ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Project'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.ProjectID = t.ProjectID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectTag_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectTag'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectTagID,TagID,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectTagID,TagID,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectTag'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateProjectTag ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'ProjectTag'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.ProjectTagID = t.ProjectTagID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectTemplate_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectTemplate'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectTemplateID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectTemplateID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectTemplate'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateProjectTemplate ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'ProjectTemplate'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.ProjectTemplateID = t.ProjectTemplateID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectUser_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectUser'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectUserID,ProjectID,UserID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectUserID,ProjectID,UserID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectUser'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateProjectUser ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'ProjectUser'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.ProjectUserID = t.ProjectUserID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger RelationshipType_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'RelationshipType'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select RelationshipTypeID,DisplayName,ForwardDisplayName,ReverseDisplayName,TemplateReferenceName,IsDirectional,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select RelationshipTypeID,DisplayName,ForwardDisplayName,ReverseDisplayName,TemplateReferenceName,IsDirectional,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'RelationshipType'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateRelationshipType ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'RelationshipType'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.RelationshipTypeID = t.RelationshipTypeID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Story_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Story'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryID,Name,ProjectID,Points,Status,Complexity,Maturity,Certainty,AreaID,PriorityID,IterationID,PriorityClassification,ValueClassification,AssignedTo,AssignedToUserID,Description,IsSyncable,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryID,Name,ProjectID,Points,Status,Complexity,Maturity,Certainty,AreaID,PriorityID,IterationID,PriorityClassification,ValueClassification,AssignedTo,AssignedToUserID,Description,IsSyncable,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Story'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateStory ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Story'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.StoryID = t.StoryID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryPersona_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryPersona'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryPersonaID,ProjectID,StoryID,PersonaID,Role,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryPersonaID,ProjectID,StoryID,PersonaID,Role,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryPersona'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateStoryPersona ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'StoryPersona'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.StoryPersonaID = t.StoryPersonaID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryRelationship_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryRelationship'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryRelationshipID,RelationshipTypeID,ProjectID,ForwardStoryID,ReverseStoryID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryRelationshipID,RelationshipTypeID,ProjectID,ForwardStoryID,ReverseStoryID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryRelationship'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateStoryRelationship ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'StoryRelationship'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.StoryRelationshipID = t.StoryRelationshipID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryRichDescription_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryRichDescription'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryRichDescriptionID,ProjectID,StoryID,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryRichDescriptionID,ProjectID,StoryID,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryRichDescription'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateStoryRichDescription ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'StoryRichDescription'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.StoryRichDescriptionID = t.StoryRichDescriptionID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Tag_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Tag'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TagID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TagID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Tag'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateTag ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Tag'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.TagID = t.TagID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Task_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Task'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TaskID,Name,ProjectID,StoryID,EstimateOptimistic,EstimateProbable,EstimatePessimistic,Status,AreaID,IterationID,AssignedTo,AssignedToUserID,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TaskID,Name,ProjectID,StoryID,EstimateOptimistic,EstimateProbable,EstimatePessimistic,Status,AreaID,IterationID,AssignedTo,AssignedToUserID,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Task'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateTask ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Task'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.TaskID = t.TaskID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger TestCase_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'TestCase'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TestCaseID,ProjectID,StoryID,TestCaseTitle,TestCaseText,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TestCaseID,ProjectID,StoryID,TestCaseTitle,TestCaseText,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'TestCase'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateTestCase ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'TestCase'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.TestCaseID = t.TestCaseID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Timeline_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Timeline'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TimelineID,ProjectStartDate,ProjectEndDate,CreateIterations,DefaultIterationLength,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TimelineID,ProjectStartDate,ProjectEndDate,CreateIterations,DefaultIterationLength,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Timeline'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateTimeline ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Timeline'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.TimelineID = t.TimelineID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateUser ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'User'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.UserID = t.UserID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger User_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'User'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select UserID,Domain,Username,FirstName,LastName,Email,IsEnabled,PictureContentType,DeletionDate,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select UserID,Domain,Username,FirstName,LastName,Email,IsEnabled,PictureContentType,DeletionDate,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'User'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
ALTER TRIGGER UpdateVersion ON dbo.Version AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    UPDATE  SET LastModifiedDateUtc = getdate() WHERE VersionID IN (SELECT VersionID FROM inserted)
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION SyncErrorCountSummary
(  
)
RETURNS TABLE
AS
RETURN
(
    select
        ProjectID,
        (select count(*) from SynchronizationError where ProjectID = s.ProjectID) as ErrorCount,
        (select SyncStatus from ProjectSync where ProjectID = s.ProjectID) as SyncStatus
    from Project as s
)
GO
PRINT N'Altering ....';
 
 
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER FUNCTION ProjectSummaries
(  
)
RETURNS TABLE
AS
RETURN
(
 Select ProjectID, Name, Description, CreatedDateUTC, LastModifiedDateUtc,
        CASE
         WHEN LEN(Tags) > 0 THEN LEFT(Tags, LEN(Tags) -1)
         ELSE ''
        END AS Tags,
        CASE
         WHEN LEN(AuthorizedUsers) > 0 THEN LEFT(AuthorizedUsers, LEN(AuthorizedUsers) -1)
         ELSE ''
        END AS AuthorizedUsers
        FROM (
            SELECT ProjectID, Name, Description, CreatedDateUTC, LastModifiedDateUtc
            ,(
            SELECT t.Name + ','
            FROM ProjectTag as pt inner join Tag as t on pt.TagID = t.TagID
            WHERE pt.ProjectID = p.ProjectID
            ORDER BY Name
            FOR XML PATH('')
            ) AS Tags,
            (
            SELECT u.Domain + '\' + u.Username + ','
            FROM ProjectUser pu INNER JOIN dbo. u ON pu.UserID = u.UserID
            WHERE pu.ProjectID = p.ProjectID
            ORDER BY u.Domain, u.Username
            FOR XML PATH('')
            ) AS AuthorizedUsers         
 
        FROM Project AS p) as TBL
)
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION StoryCountSummary
(  
)
RETURNS TABLE
AS
RETURN
(
    select
        ProjectID,
        IterationID,
        Status,
        (select count(*) from Story where ProjectID = s.ProjectID) as OverallCount,
        (select count(*) from Story where ProjectID = s.ProjectID AND IterationID = s.IterationID) as IterationCount,
        COUNT(Status) as StatusCount
    from Story as s
    group by projectid, iterationid, status
     
)
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION StringListToTable (@list ntext)
      RETURNS @tbl TABLE (listpos int IDENTITY(1, 1) NOT NULL,
                          value  varchar(4000) NOT NULL) AS
   BEGIN
      DECLARE @pos      int,
              @textpos  int,
              @chunklen smallint,
              @str      nvarchar(4000),
              @tmpstr   nvarchar(4000),
              @leftover nvarchar(4000)
 
      SET @textpos = 1
      SET @leftover = ''
      WHILE @textpos <= datalength(@list) / 2
      BEGIN
         SET @chunklen = 4000 - datalength(@leftover) / 2
         SET @tmpstr = ltrim(@leftover + substring(@list, @textpos,
                                 @chunklen))
         SET @textpos = @textpos + @chunklen
 
         SET @pos = charindex(',', @tmpstr)
         WHILE @pos > 0
         BEGIN
            SET @str = substring(@tmpstr, 1, @pos - 1)
            INSERT @tbl (value) VALUES(@str)
            SET @tmpstr = ltrim(substring(@tmpstr, @pos + 1,
                                 len(@tmpstr)))
            SET @pos = charindex(',', @tmpstr)
         END
 
         SET @leftover = @tmpstr
      END
 
      IF ltrim(rtrim(@leftover)) <> ''
         INSERT @tbl (value) VALUES(@leftover)
 
      RETURN
   END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION .
(
)
RETURNS TABLE
AS
RETURN
(
SELECT     ROW_NUMBER() OVER(Order By ProjectID ASC, AssignedToUserID ASC) as RowID,   
               ProjectID,
               AssignedToUserID,
               AssignedTo,
               IterationID,
               u.IsEnabled,
               u.DeletionDate,
               (SELECT     COUNT(*) AS Expr1
                 FROM          dbo.Story
                 WHERE      (Status NOT IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS TotalCount,
                  
               (SELECT     COUNT(*) AS Expr1
                 FROM          dbo.Story AS Story_3
                 WHERE      (Status IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS DoneCount,
                  
               (SELECT     SUM(Points) AS Expr1
                 FROM          dbo.Story AS Story_2
                 WHERE      (Status NOT IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS TotalPoints,
                  
               (SELECT     SUM(Points) AS Expr1
                 FROM          dbo.Story AS Story_1
                 WHERE      (Status IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS DonePoints
                  
    FROM dbo.Story AS s LEFT OUTER JOIN  u ON s.AssignedToUserID = u.UserID
    GROUP BY ProjectID, AssignedToUserID, IterationID, AssignedTo, u.IsEnabled, u.DeletionDate
 
)
GO
PRINT N'Altering ....';
 
 
GO
ALTER FUNCTION .
(
)
RETURNS TABLE AS RETURN
(
    SELECT
        StoryID,
         
        (SELECT count(*) FROM Task WHERE StoryID = s.StoryID
            AND (Status IN (SELECT value FROM StringListToTable(
                (SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) )))
        AS TasksCompletedCount,
 
        (SELECT count(*) FROM Task WHERE StoryID = s.StoryID
            AND (Status NOT IN (SELECT value FROM StringListToTable(
                (SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) )) )
        AS TasksIncludedCount
 
    FROM Story as s
)
GO
PRINT N'Refreshing ....';
 
 
GO
EXECUTE sp_refreshview N'dbo.IterationCapacity';
 
 
GO
PRINT N'Refreshing ....';
 
 
GO
EXECUTE sp_refreshview N'dbo.RelatedStory';
 
 
GO
 on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
MSI (s) (98!34) [16:55:01:030]: Closing MSIHANDLE (301) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:01:033]: Creating MSIHANDLE (302) of type 790531 for thread 2612
Failed to execute sql, exception details: System.IO.FileLoadException: Could not load file or assembly 'Microsoft.SqlServer.BatchParser, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail. (Exception from HRESULT: 0x800736B1)
File name: 'Microsoft.SqlServer.BatchParser, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' ---> System.Runtime.InteropServices.COMException (0x800736B1): The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail. (Exception from HRESULT: 0x800736B1)
   at System.Reflection.Assembly._GetType(String name, Boolean throwOnError, Boolean ignoreCase)
   at System.Reflection.Assembly.GetType(String name, Boolean throwOnError)
   at Microsoft.SqlServer.Management.Common.ServerConnection.GetStatements(String query, ExecutionTypes executionType, Int32& statementsToReverse)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand)
   at DatabaseExtensions.CustomActions.ExecuteSQL(Session session, Server server, String sql)
 
 
MSI (s) (98!34) [16:55:01:034]: Closing MSIHANDLE (302) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:01:034]: Creating MSIHANDLE (303) of type 790531 for thread 2612
Result: Failure
MSI (s) (98!34) [16:55:01:035]: Closing MSIHANDLE (303) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:01:036]: Creating MSIHANDLE (304) of type 790531 for thread 2612
Rolling back installation transaction...
MSI (s) (98!34) [16:55:01:036]: Closing MSIHANDLE (304) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:01:037]: Creating MSIHANDLE (305) of type 790531 for thread 2612
Executing sql script ROLLBACK TRANSACTION TeamPulseInstallTrans on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
MSI (s) (98!34) [16:55:01:037]: Closing MSIHANDLE (305) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:01:040]: Creating MSIHANDLE (306) of type 790531 for thread 2612
Failed to execute sql, exception details: System.IO.FileLoadException: Could not load file or assembly 'Microsoft.SqlServer.BatchParser, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail. (Exception from HRESULT: 0x800736B1)
File name: 'Microsoft.SqlServer.BatchParser, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' ---> System.Runtime.InteropServices.COMException (0x800736B1): The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail. (Exception from HRESULT: 0x800736B1)
   at System.Reflection.Assembly._GetType(String name, Boolean throwOnError, Boolean ignoreCase)
   at System.Reflection.Assembly.GetType(String name, Boolean throwOnError)
   at Microsoft.SqlServer.Management.Common.ServerConnection.GetStatements(String query, ExecutionTypes executionType, Int32& statementsToReverse)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand)
   at DatabaseExtensions.CustomActions.ExecuteSQL(Session session, Server server, String sql)
 
 
MSI (s) (98!34) [16:55:01:042]: Closing MSIHANDLE (306) of type 790531 for thread 2612
MSI (s) (98!34) [16:55:01:043]: Closing MSIHANDLE (292) of type 790531 for thread 2612
MSI (s) (98:10) [16:55:02:741]: Closing MSIHANDLE (288) of type 790542 for thread 1832
Action ended 16:55:02: RunSQLScripts. Return value 3.
MSI (s) (98:28) [16:55:02:743]: Machine policy value 'DisableRollback' is 0
MSI (s) (98:28) [16:55:02:743]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (98:28) [16:55:02:744]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (98:28) [16:55:02:744]: No System Restore sequence number for this installation.
MSI (s) (98:28) [16:55:02:744]: Unlocking Server
Action ended 16:55:02: INSTALL. Return value 3.
Property(S): VirtualMemory = 7603
Property(S): UpgradeCode = {03AA1D0A-ABCB-4610-99C5-B53CA5DDB9A4}
Property(S): ASPNET = #1
Property(S): ASPNET64 = #1
Property(S): IIS7ADMINSVC = #1
Property(S): IIS7ADMINSVC64 = #1
Property(S): IIS7MGMTCONSOLE = #1
Property(S): IIS7MGMTCONSOLE64 = #1
Property(S): IIS7WINDOWSAUTH = #1
Property(S): IIS7WINDOWSAUTH64 = #1
Property(S): DEFAULTDOCUMENT = #1
Property(S): DEFAULTDOCUMENT64 = #1
Property(S): HTTPREDIRECTION = #1
Property(S): HTTPREDIRECTION64 = #1
Property(S): STATICCONTENT = #1
Property(S): STATICCONTENT64 = #1
Property(S): NETFRAMEWORK40 = C:\Windows\Microsoft.NET\Framework\v4.0.30319\
Property(S): INSTALLLOCATION = C:\Program Files\Telerik\TeamPulse\
Property(S): NETSH = C:\Windows\system32\Netsh.exe
Property(S): IISMAJORVERSION = #7
Property(S): IISMINORVERSION = #0
Property(S): ShouldLaunchInstallHelp = 1
Property(S): WebRoot = C:\Program Files\Telerik\TeamPulse\wwwroot\
Property(S): CommonFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Common\
Property(S): DownloadFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Download\
Property(S): ImagesFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Images\
Property(S): ServiceFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Services\
Property(S): TempStorage.Folder = C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\
Property(S): FeedsFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\
Property(S): ClientBinFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\
Property(S): binFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\bin\
Property(S): UserManagementRoot = C:\Program Files\Telerik\TeamPulse\UserManagement\
Property(S): bin = C:\Program Files\Telerik\TeamPulse\UserManagement\bin\
Property(S): Content = C:\Program Files\Telerik\TeamPulse\UserManagement\Content\
Property(S): Images = C:\Program Files\Telerik\TeamPulse\UserManagement\Images\
Property(S): Scripts = C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\
Property(S): Views = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\
Property(S): Home = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\
Property(S): EditorTemplates = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\
Property(S): License = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\
Property(S): Shared = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\
Property(S): Activation = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\
Property(S): Welcome = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\
Property(S): Release = C:\Program Files\Telerik\TeamPulse\IntegrationService\
Property(S): MappingDefaults = C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\
Property(S): logs.Folder = C:\Program Files\Telerik\TeamPulse\Logs\
Property(S): ProgramTelerikDir = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\
Property(S): ProgramMenuDir = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\
Property(S): USERINFORBGSELECTION = 0
Property(S): DOMAIN = BUMBLEBEE
Property(S): USERNAME = Administrator
Property(S): DB_PATH = BUMBLEBEE
Property(S): DB_DOMAIN = BUMBLEBEE
Property(S): DB_USERNAME = Administrator
Property(S): DB_PASSWORD = **********
Property(S): WIXUI_INSTALLDIR = INSTALLLOCATION
Property(S): WixUIRMOption = UseRM
Property(S): INSTALLERROR = **********
Property(S): ARPNOREPAIR = 1
Property(S): CleanupExistingTeampulseSite = SystemFolder=C:\Windows\system32\
Property(S): CleanupExistingUserManagementSite = SystemFolder=C:\Windows\system32\
Property(S): CleanupExistingApplicationPool = SystemFolder=C:\Windows\system32\
Property(S): CreateApplicationPool = **********
Property(S): ConfigureTeamPulseWebSites = SystemFolder=C:\Windows\system32\;INSTALLDIR=C:\Program Files\Telerik\TeamPulse\;NETFRAMEWORK40=C:\Windows\Microsoft.NET\Framework\v4.0.30319\
Property(S): FixupIIS = SystemFolder=C:\Windows\system32\;INSTALLDIR=C:\Program Files\Telerik\TeamPulse\;NETFRAMEWORK40=C:\Windows\Microsoft.NET\Framework\v4.0.30319\
Property(S): RegisterNamespaces = DB_DOMAIN=BUMBLEBEE;DB_USERNAME=Administrator;NETSH=C:\Windows\system32\Netsh.exe
Property(S): UnregisterNamespaces = NETSH=C:\Windows\system32\Netsh.exe
Property(S): ExecXmlFile = 1€1€C:\Program Files\Telerik\TeamPulse\wwwroot\Web.Config€3€0€/configuration/connectionStrings/add[@name='TeamPulse.Core.Properties.Settings.TeamPulseConnectionString']/@connectionString€€server=BUMBLEBEE;Integrated Security=true;DATABASE=TeamPulse€3€0€/configuration/appSettings/add[@key='CompanyLicenseName']/@value€€TeamPulse€3€0€/configuration/appSettings/add[@key='MachineID']/@value€€o2BV4oz2NF2wnV8hSX4wFBeOq8M5js6TKM1+I4sM1lE=€3€0€/configuration/appSettings/add[@key='UserManagementURL']/@value€€http://BUMBLEBEE:9897/€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Services.AuthorizationService']/endpoint/@bindingConfiguration€€windowsHttp€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Feeds.ChartFeed']/endpoint/@bindingConfiguration€€windowsRss€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Feeds.NewsFeed']/endpoint/@bindingConfiguration€€windowsRss€3€0€/configuration/system.serviceModel/client/endpoint[@contract='BestPracticeService.IBestPracticeService']/@address€€http://BUMBLEBEE:9899/TeamPulse.Services/BestPractices/€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Services.BestPracticeService']/endpoint/@bindingConfiguration€€windowsHttp€3€0€/configuration/system.serviceModel/client/endpoint[@contract='SynchronizationService.ISynchronizationService']/@address€€http://BUMBLEBEE:9899/TeamPulse.Services/Synchronization/€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Services.SynchronizationService']/endpoint/@bindingConfiguration€€windowsHttp€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Services.FileService']/endpoint/@bindingConfiguration€€windowsHttp€3€0€/configuration/log4net/appender[@name='RollingFileAppender']/file/@value€€C:\Program Files\Telerik\TeamPulse\Logs\web-log.txt€1€1€C:\Program Files\Telerik\TeamPulse\UserManagement\Web.config€3€0€/configuration/appSettings/add[@key='MachineID']/@value€€o2BV4oz2NF2wnV8hSX4wFBeOq8M5js6TKM1+I4sM1lE=€3€0€/configuration/connectionStrings/add[@name='TeamPulseConnectionString']/@connectionString€€server=BUMBLEBEE;Integrated Security=true;DATABASE=TeamPulse€3€0€/configuration/appSettings/add[@key='ManualActivationFormURL']/@value€€http://www.telerik.com/team-productivity-tools/account/license-keys.aspx?utm_source=TeamPulse_user_management&utm_medium=banner&utm_campaign=account_license_keys€3€0€/configuration/appSettings/add[@key='ManualDeactivationFormURL']/@value€€http://www.telerik.com/team-productivity-tools/account/license-keys/manual-deactivation.aspx?utm_source=TeamPulse_user_management&utm_medium=banner&utm_campaign=account_license-keys_manual-deactivation€3€0€/configuration/appSettings/add[@key='SupportURL']/@value€€http://www.telerik.com/team-productivity-tools/support-resources?utm_source=TeamPulse_user_management&utm_medium=banner&utm_campaign=support€3€0€/configuration/system.serviceModel/client/endpoint[@contract='ILicenseTeamPulseService']/@address€€https://www.telerik.com/services/LicenseService/Service.svc€3€0€/configuration/appSettings/add[@key='TeamPulseURL']/@value€€http://BUMBLEBEE:9898/€1€1€C:\Program Files\Telerik\TeamPulse\IntegrationService\TeamPulse.Integration.Service.exe.config€3€0€/configuration/connectionStrings/add[@name='TeamPulseConnectionString']/@connectionString€€server=BUMBLEBEE;Integrated Security=true;DATABASE=TeamPulse€3€0€/configuration/log4net/appender[@name='RollingFileAppender']/file/@value€€C:\Program Files\Telerik\TeamPulse\Logs\integration-log.txt€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Integration.Core.Services.SynchronizationService']/host/baseAddresses/add/@baseAddress€€http://BUMBLEBEE:9899/TeamPulse.Services/Synchronization/€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Integration.Core.CrossDomain.CrossDomainService']/host/baseAddresses/add/@baseAddress€€http://BUMBLEBEE:9899€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Integration.Core.Services.BestPracticeService']/host/baseAddresses/add/@baseAddress€€http://BUMBLEBEE:9899/TeamPulse.Services/BestPractices/€3€0€/configuration/appSettings/add[@key='ChartFilesBaseDirectory']/@value€€..\wwwroot\Images\Charts€1€1€C:\Program Files\Telerik\TeamPulse\IntegrationService\TeamPulse.Integration.Service.exe.config€3€0€/configuration/appSettings/add[@key='MachineID']/@value€€o2BV4oz2NF2wnV8hSX4wFBeOq8M5js6TKM1+I4sM1lE=
Property(S): ExecSecureObjectsRollback = C:\Program Files\Telerik\TeamPulse\Logs\€CreateFolder€D:AI(A;;0x17019f;;;WD)(A;OICIIO;DCLCSDWDGWGR;;;WD)(A;ID;FA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;CIIOID;GA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;ID;FA;;;SY)(A;OICIIOID;GA;;;SY)(A;ID;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;0x1200a9;;;BU)(A;OICIIOID;GXGR;;;BU)(A;OICIIOID;GA;;;CO)€0
Property(S): CreateUser = **********
Property(S): COMPANYNAME = TeamPulse
Property(S): IntegrationService = C:\Program Files\Telerik\TeamPulse\
Property(S): TelerikFolder = C:\Program Files\Telerik\
Property(S): ProgramFilesFolder = C:\Program Files\
Property(S): TARGETDIR = C:\
Property(S): ProgramMenuFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
Property(S): SourceDir = C:\
Property(S): VersionNT = 600
Property(S): Manufacturer = Telerik
Property(S): ProductCode = {02E84302-F860-462A-BF16-FE2D92A4A06A}
Property(S): ProductLanguage = 1033
Property(S): ProductName = Telerik TeamPulse
Property(S): ProductVersion = 103.11.17.0
Property(S): IISMAJORVERSION_MSG = TeamPulse requires Internet Information Services 7 (or above) to be installed.
Property(S): ASPNET_MSG = IIS ASP.NET component is required.
Property(S): IIS7ADMINSVC_MSG = IIS Management Console or Management Service component is required.
Property(S): IIS7WINDOWSAUTH_MSG = IIS Windows Authentication component is required.
Property(S): DEFAULTDOCUMENT_MSG = IIS Default Document component is required.
Property(S): HTTPREDIRECTION_MSG = IIS HTTP Redirection component is required.
Property(S): STATICCONTENT_MSG = IIS Static Content component is required.
Property(S): NETFRAMEWORK40_MSG = TeamPulse requires .NET Framework 4.0 RTM to be installed.
Property(S): ISCORRECTNETFRAMEWORK40VERSION = 1
Property(S): GENERIC_ERROR_MSG = An unexpected error has occurred.
Property(S): IntegrationServicePortNumber = 9899
Property(S): IntegrationServiceName = TeamPulseIntegrationService
Property(S): PRODUCTSHORTNAME = TeamPulse Community Edition
Property(S): PRODUCTMAJORRELEASE = 2010.3.1117.0
Property(S): RELEASEDATE = 2010/11/17
Property(S): AUTOACTIVATIONSERVICEURL = https://www.telerik.com/services/LicenseService/Service.svc
Property(S): INSTALLLOCATIONFOUND = 0
Property(S): TEAMPULSE_CONNECTION_STRING = **********
Property(S): SERVER_CONNECTION_STRING = **********
Property(S): DB_LOGIN_TYPE = WinAuthCurrentUser
Property(S): DB_CONNECTION_RESULT = -1
Property(S): DB_LAST_CONNECTION_RESULT = 1
Property(S): DB_COLLATION = **********
Property(S): WELCOMEPAGE = http://localhost:9897/Welcome
Property(S): BOOKMARK_ASPNET = #aspnet
Property(S): BOOKMARK_IIS7 = #IIS7
Property(S): BOOKMARK_IIS7ADMINSVC = #iismng
Property(S): BOOKMARK_IIS7_WIN_AUTH = #iisauth
Property(S): BOOKMARK_DEFAULT_DOC = #iisdoc
Property(S): BOOKMARK_STATIC_CONTENT = #iishttp
Property(S): BOOKMARK_HTTP_REDIRECTION = #iisredirection
Property(S): BOOKMARK_SQL2008 = #SQL2008
Property(S): ARPPRODUCTICON = ProgramIcon
Property(S): ARPHELPLINK = http://www.telerik.com/
Property(S): ACTIVATION = bIAcLFxPdF3nGFq5rI0YkI2lYVCRFCYIYO7HXlgW/q9fbUQFCI5cdA==
Property(S): INSTALL_THIS_COMPONENT = no
Property(S): ShouldLaunchDemos = 1
Property(S): ShouldLaunchReadme = 1
Property(S): DefaultUIFont = Telerik_Font_MidSizeText
Property(S): ARPNOMODIFY = 1
Property(S): INSTALL_ENABLED_NEXT_BTN = 1
Property(S): UNINSTALL_ENABLED_NEXT_BTN = 1
Property(S): ErrorDialog = ErrorDlg
Property(S): SecureCustomProperties = BETADETECTED;NETSH;NEWERVERSIONDETECTED;PREVIOUSVERSIONDETECTED
Property(S): MsiHiddenProperties = CreateApplicationPool;CreateUser;DB_COLLATION;DB_PASSWORD;INSTALLERROR;INSTALLREDIRECTPAGE;MACHINEID;SERVER_CONNECTION_STRING;TEAMPULSE_CONNECTION_STRING
Property(S): MsiLogFileLocation = C:\teampulselog.txt
Property(S): PackageCode = {99765709-1FEF-4648-A08B-9B16F74CFA8D}
Property(S): ProductState = -1
Property(S): PackagecodeChanging = 1
Property(S): CURRENTDIRECTORY = C:\
Property(S): CLIENTUILEVEL = 0
Property(S): CLIENTPROCESSID = 3612
Property(S): VersionDatabase = 200
Property(S): ACTION = INSTALL
Property(S): EXECUTEACTION = INSTALL
Property(S): SECONDSEQUENCE = 1
Property(S): ROOTDRIVE = C:\
Property(S): INSTALLLEVEL = 1000
Property(S): MACHINEID = **********
Property(S): ADDLOCAL = ProductFeature
Property(S): VersionMsi = 4.05
Property(S): WindowsBuild = 6002
Property(S): ServicePackLevel = 2
Property(S): ServicePackLevelMinor = 0
Property(S): MsiNTProductType = 3
Property(S): WindowsFolder = C:\Windows\
Property(S): WindowsVolume = C:\
Property(S): SystemFolder = C:\Windows\system32\
Property(S): System16Folder = C:\Windows\system\
Property(S): RemoteAdminTS = 1
Property(S): TempFolder = C:\Users\ADMINI~1\AppData\Local\Temp\
Property(S): CommonFilesFolder = C:\Program Files\Common Files\
Property(S): AppDataFolder = C:\Users\Administrator\AppData\Roaming\
Property(S): FavoritesFolder = C:\Users\Administrator\Favorites\
Property(S): NetHoodFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts\
Property(S): PersonalFolder = C:\Users\Administrator\Documents\
Property(S): PrintHoodFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Printer Shortcuts\
Property(S): RecentFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent\
Property(S): SendToFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo\
Property(S): TemplateFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates\
Property(S): CommonAppDataFolder = C:\ProgramData\
Property(S): LocalAppDataFolder = C:\Users\Administrator\AppData\Local\
Property(S): MyPicturesFolder = C:\Users\Administrator\Pictures\
Property(S): AdminToolsFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools\
Property(S): StartupFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
Property(S): StartMenuFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\
Property(S): DesktopFolder = C:\Users\Administrator\Desktop\
Property(S): FontsFolder = C:\Windows\Fonts\
Property(S): GPTSupport = 1
Property(S): OLEAdvtSupport = 1
Property(S): ShellAdvtSupport = 1
Property(S): Intel = 6
Property(S): PhysicalMemory = 4060
Property(S): AdminUser = 1
Property(S): LogonUser = Administrator
Property(S): UserSID = S-1-5-21-1565970331-1841932326-737719383-500
Property(S): UserLanguageID = 6153
Property(S): ComputerName = BUMBLEBEE
Property(S): SystemLanguageID = 6153
Property(S): ScreenX = 1024
Property(S): ScreenY = 768
Property(S): CaptionHeight = 19
Property(S): BorderTop = 1
Property(S): BorderSide = 1
Property(S): TextHeight = 16
Property(S): TextInternalLeading = 3
Property(S): ColorBits = 32
Property(S): TTCSupport = 1
Property(S): Time = 16:55:02
Property(S): Date = 24/11/2010
Property(S): MsiNetAssemblySupport = 4.0.30319.1
Property(S): MsiWin32AssemblySupport = 6.0.6001.18000
Property(S): RedirectedDllSupport = 2
Property(S): MsiRunningElevated = 1
Property(S): Privileged = 1
Property(S): DATABASE = C:\Windows\Installer\5e8f9.msi
Property(S): OriginalDatabase = C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
Property(S): UILevel = 5
Property(S): Preselected = 1
Property(S): CostingComplete = 1
Property(S): OutOfDiskSpace = 0
Property(S): OutOfNoRbDiskSpace = 0
Property(S): PrimaryVolumeSpaceAvailable = 0
Property(S): PrimaryVolumeSpaceRequired = 0
Property(S): PrimaryVolumeSpaceRemaining = 0
Property(S): SourcedirProduct = {02E84302-F860-462A-BF16-FE2D92A4A06A}
Property(S): SOURCEDIR = C:\
MSI (s) (98:28) [16:55:02:840]: MainEngineThread is returning 1603
MSI (s) (98:F0) [16:55:02:840]: RESTART MANAGER: Session closed.
MSI (s) (98:F0) [16:55:02:840]: No System Restore sequence number for this installation.
MSI (s) (98:F0) [16:55:02:841]: User policy value 'DisableRollback' is 0
MSI (s) (98:F0) [16:55:02:841]: Machine policy value 'DisableRollback' is 0
MSI (s) (98:F0) [16:55:02:841]: Incrementing counter to disable shutdown. Counter after increment: 0
MSI (s) (98:F0) [16:55:02:842]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (98:F0) [16:55:02:842]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (98:F0) [16:55:02:843]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied.  Counter after decrement: -1
MSI (s) (98:F0) [16:55:02:843]: Restoring environment variables
MSI (s) (98:F0) [16:55:02:844]: Destroying RemoteAPI object.
MSI (s) (98:D4) [16:55:02:844]: Custom Action Manager thread ending.
MSI (c) (1C:88) [16:55:02:845]: Back from server. Return value: 1603
MSI (c) (1C:88) [16:55:02:845]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied.  Counter after decrement: -1
MSI (c) (1C:88) [16:55:02:846]: PROPERTY CHANGE: Deleting SECONDSEQUENCE property. Its current value is '1'.
Action ended 16:55:02: ExecuteAction. Return value 3.
MSI (c) (1C:88) [16:55:02:846]: Doing action: FatalErrorTelerik
Action 16:55:02: FatalErrorTelerik.
Action start 16:55:02: FatalErrorTelerik.
Action 16:55:02: FatalErrorTelerik. Dialog created
MSI (c) (1C:B0) [16:55:05:762]: PROPERTY CHANGE: Deleting ShouldLaunchInstallHelp property. Its current value is '1'.
Action ended 16:55:06: FatalErrorTelerik. Return value 2.
Action ended 16:55:06: INSTALL. Return value 3.
MSI (c) (1C:88) [16:55:06:740]: Destroying RemoteAPI object.
MSI (c) (1C:84) [16:55:06:741]: Custom Action Manager thread ending.
Property(C): VirtualMemory = 7616
Property(C): UpgradeCode = {03AA1D0A-ABCB-4610-99C5-B53CA5DDB9A4}
Property(C): ASPNET = #1
Property(C): ASPNET64 = #1
Property(C): IIS7ADMINSVC = #1
Property(C): IIS7ADMINSVC64 = #1
Property(C): IIS7MGMTCONSOLE = #1
Property(C): IIS7MGMTCONSOLE64 = #1
Property(C): IIS7WINDOWSAUTH = #1
Property(C): IIS7WINDOWSAUTH64 = #1
Property(C): DEFAULTDOCUMENT = #1
Property(C): DEFAULTDOCUMENT64 = #1
Property(C): HTTPREDIRECTION = #1
Property(C): HTTPREDIRECTION64 = #1
Property(C): STATICCONTENT = #1
Property(C): STATICCONTENT64 = #1
Property(C): NETFRAMEWORK40 = C:\Windows\Microsoft.NET\Framework\v4.0.30319\
Property(C): INSTALLLOCATION = C:\Program Files\Telerik\TeamPulse\
Property(C): NETSH = C:\Windows\system32\Netsh.exe
Property(C): IISMAJORVERSION = #7
Property(C): IISMINORVERSION = #0
Property(C): LicenseAccepted = 1
Property(C): WebRoot = C:\Program Files\Telerik\TeamPulse\wwwroot\
Property(C): CommonFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Common\
Property(C): DownloadFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Download\
Property(C): ImagesFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Images\
Property(C): ServiceFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Services\
Property(C): TempStorage.Folder = C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\
Property(C): FeedsFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\
Property(C): ClientBinFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\
Property(C): binFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\bin\
Property(C): UserManagementRoot = C:\Program Files\Telerik\TeamPulse\UserManagement\
Property(C): bin = C:\Program Files\Telerik\TeamPulse\UserManagement\bin\
Property(C): Content = C:\Program Files\Telerik\TeamPulse\UserManagement\Content\
Property(C): Images = C:\Program Files\Telerik\TeamPulse\UserManagement\Images\
Property(C): Scripts = C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\
Property(C): Views = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\
Property(C): Home = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\
Property(C): EditorTemplates = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\
Property(C): License = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\
Property(C): Shared = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\
Property(C): Activation = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\
Property(C): Welcome = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\
Property(C): Release = C:\Program Files\Telerik\TeamPulse\IntegrationService\
Property(C): MappingDefaults = C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\
Property(C): logs.Folder = C:\Program Files\Telerik\TeamPulse\Logs\
Property(C): ProgramTelerikDir = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\
Property(C): ProgramMenuDir = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\
Property(C): USERINFORBGSELECTION = 0
Property(C): DOMAIN = BUMBLEBEE
Property(C): USERNAME = Administrator
Property(C): DB_PATH = BUMBLEBEE
Property(C): DB_DOMAIN = BUMBLEBEE
Property(C): DB_USERNAME = Administrator
Property(C): DB_PASSWORD = **********
Property(C): WIXUI_INSTALLDIR = INSTALLLOCATION
Property(C): WixUIRMOption = UseRM
Property(C): ARPNOREPAIR = 1
Property(C): CreateUser = **********
Property(C): COMPANYNAME = TeamPulse
Property(C): IntegrationService = C:\Program Files\Telerik\TeamPulse\
Property(C): TelerikFolder = C:\Program Files\Telerik\
Property(C): ProgramFilesFolder = C:\Program Files\
Property(C): TARGETDIR = C:\
Property(C): ProgramMenuFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
Property(C): SourceDir = C:\
Property(C): VersionNT = 600
Property(C): Manufacturer = Telerik
Property(C): ProductCode = {02E84302-F860-462A-BF16-FE2D92A4A06A}
Property(C): ProductLanguage = 1033
Property(C): ProductName = Telerik TeamPulse
Property(C): ProductVersion = 103.11.17.0
Property(C): IISMAJORVERSION_MSG = TeamPulse requires Internet Information Services 7 (or above) to be installed.
Property(C): ASPNET_MSG = IIS ASP.NET component is required.
Property(C): IIS7ADMINSVC_MSG = IIS Management Console or Management Service component is required.
Property(C): IIS7WINDOWSAUTH_MSG = IIS Windows Authentication component is required.
Property(C): DEFAULTDOCUMENT_MSG = IIS Default Document component is required.
Property(C): HTTPREDIRECTION_MSG = IIS HTTP Redirection component is required.
Property(C): STATICCONTENT_MSG = IIS Static Content component is required.
Property(C): NETFRAMEWORK40_MSG = TeamPulse requires .NET Framework 4.0 RTM to be installed.
Property(C): ISCORRECTNETFRAMEWORK40VERSION = 1
Property(C): GENERIC_ERROR_MSG = An unexpected error has occurred.
Property(C): IntegrationServicePortNumber = 9899
Property(C): IntegrationServiceName = TeamPulseIntegrationService
Property(C): PRODUCTSHORTNAME = TeamPulse Community Edition
Property(C): PRODUCTMAJORRELEASE = 2010.3.1117.0
Property(C): RELEASEDATE = 2010/11/17
Property(C): AUTOACTIVATIONSERVICEURL = https://www.telerik.com/services/LicenseService/Service.svc
Property(C): INSTALLLOCATIONFOUND = 0
Property(C): TEAMPULSE_CONNECTION_STRING = **********
Property(C): SERVER_CONNECTION_STRING = **********
Property(C): DB_LOGIN_TYPE = WinAuthCurrentUser
Property(C): DB_CONNECTION_RESULT = -1
Property(C): DB_LAST_CONNECTION_RESULT = 1
Property(C): DB_COLLATION = **********
Property(C): WELCOMEPAGE = http://localhost:9897/Welcome
Property(C): BOOKMARK_ASPNET = #aspnet
Property(C): BOOKMARK_IIS7 = #IIS7
Property(C): BOOKMARK_IIS7ADMINSVC = #iismng
Property(C): BOOKMARK_IIS7_WIN_AUTH = #iisauth
Property(C): BOOKMARK_DEFAULT_DOC = #iisdoc
Property(C): BOOKMARK_STATIC_CONTENT = #iishttp
Property(C): BOOKMARK_HTTP_REDIRECTION = #iisredirection
Property(C): BOOKMARK_SQL2008 = #SQL2008
Property(C): ARPPRODUCTICON = ProgramIcon
Property(C): ARPHELPLINK = http://www.telerik.com/
Property(C): ACTIVATION = bIAcLFxPdF3nGFq5rI0YkI2lYVCRFCYIYO7HXlgW/q9fbUQFCI5cdA==
Property(C): INSTALL_THIS_COMPONENT = no
Property(C): ShouldLaunchDemos = 1
Property(C): ShouldLaunchReadme = 1
Property(C): DefaultUIFont = Telerik_Font_MidSizeText
Property(C): ARPNOMODIFY = 1
Property(C): INSTALL_ENABLED_NEXT_BTN = 1
Property(C): UNINSTALL_ENABLED_NEXT_BTN = 1
Property(C): ErrorDialog = ErrorDlg
Property(C): SecureCustomProperties = BETADETECTED;NETSH;NEWERVERSIONDETECTED;PREVIOUSVERSIONDETECTED
Property(C): MsiHiddenProperties = CreateApplicationPool;CreateUser;DB_COLLATION;DB_PASSWORD;INSTALLERROR;INSTALLREDIRECTPAGE;MACHINEID;SERVER_CONNECTION_STRING;TEAMPULSE_CONNECTION_STRING
Property(C): MsiLogFileLocation = C:\teampulselog.txt
Property(C): PackageCode = {99765709-1FEF-4648-A08B-9B16F74CFA8D}
Property(C): ProductState = -1
Property(C): PackagecodeChanging = 1
Property(C): CURRENTDIRECTORY = C:\
Property(C): CLIENTUILEVEL = 0
Property(C): CLIENTPROCESSID = 3612
Property(C): VersionDatabase = 200
Property(C): VersionMsi = 4.05
Property(C): WindowsBuild = 6002
Property(C): ServicePackLevel = 2
Property(C): ServicePackLevelMinor = 0
Property(C): MsiNTProductType = 3
Property(C): WindowsFolder = C:\Windows\
Property(C): WindowsVolume = C:\
Property(C): SystemFolder = C:\Windows\system32\
Property(C): System16Folder = C:\Windows\system\
Property(C): RemoteAdminTS = 1
Property(C): TempFolder = C:\Users\ADMINI~1\AppData\Local\Temp\1\
Property(C): CommonFilesFolder = C:\Program Files\Common Files\
Property(C): AppDataFolder = C:\Users\Administrator\AppData\Roaming\
Property(C): FavoritesFolder = C:\Users\Administrator\Favorites\
Property(C): NetHoodFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts\
Property(C): PersonalFolder = C:\Users\Administrator\Documents\
Property(C): PrintHoodFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Printer Shortcuts\
Property(C): RecentFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent\
Property(C): SendToFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo\
Property(C): TemplateFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates\
Property(C): CommonAppDataFolder = C:\ProgramData\
Property(C): LocalAppDataFolder = C:\Users\Administrator\AppData\Local\
Property(C): MyPicturesFolder = C:\Users\Administrator\Pictures\
Property(C): AdminToolsFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools\
Property(C): StartupFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
Property(C): StartMenuFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\
Property(C): DesktopFolder = C:\Users\Administrator\Desktop\
Property(C): FontsFolder = C:\Windows\Fonts\
Property(C): GPTSupport = 1
Property(C): OLEAdvtSupport = 1
Property(C): ShellAdvtSupport = 1
Property(C): Intel = 6
Property(C): PhysicalMemory = 4060
Property(C): AdminUser = 1
Property(C): LogonUser = Administrator
Property(C): UserSID = S-1-5-21-1565970331-1841932326-737719383-500
Property(C): UserLanguageID = 6153
Property(C): ComputerName = BUMBLEBEE
Property(C): SystemLanguageID = 6153
Property(C): ScreenX = 1024
Property(C): ScreenY = 768
Property(C): CaptionHeight = 19
Property(C): BorderTop = 1
Property(C): BorderSide = 1
Property(C): TextHeight = 16
Property(C): TextInternalLeading = 3
Property(C): ColorBits = 32
Property(C): TTCSupport = 1
Property(C): Time = 16:55:06
Property(C): Date = 24/11/2010
Property(C): MsiNetAssemblySupport = 4.0.30319.1
Property(C): MsiWin32AssemblySupport = 6.0.6001.18000
Property(C): RedirectedDllSupport = 2
Property(C): MsiRunningElevated = 1
Property(C): Privileged = 1
Property(C): WixUI_InstallMode = InstallComplete
Property(C): DATABASE = C:\Users\ADMINI~1\AppData\Local\Temp\1\bcc43.msi
Property(C): OriginalDatabase = C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
Property(C): SOURCEDIR = C:\
Property(C): VersionHandler = 4.05
Property(C): UILevel = 5
Property(C): ACTION = INSTALL
Property(C): EXECUTEACTION = INSTALL
Property(C): ROOTDRIVE = C:\
Property(C): CostingComplete = 1
Property(C): OutOfDiskSpace = 0
Property(C): OutOfNoRbDiskSpace = 0
Property(C): PrimaryVolumeSpaceAvailable = 0
Property(C): PrimaryVolumeSpaceRequired = 0
Property(C): PrimaryVolumeSpaceRemaining = 0
Property(C): INSTALLLEVEL = 1000
Property(C): MACHINEID = **********
=== Logging stopped: 24/11/2010  16:55:06 ===
MSI (c) (1C:88) [16:55:06:770]: Note: 1: 1708
MSI (c) (1C:88) [16:55:06:770]: Product: Telerik TeamPulse -- Installation failed.
 
MSI (c) (1C:88) [16:55:06:771]: Windows Installer installed the product. Product Name: Telerik TeamPulse. Product Version: 103.11.17.0. Product Language: 1033. Installation success or error status: 1603.
 
MSI (c) (1C:88) [16:55:06:773]: Grabbed execution mutex.
MSI (c) (1C:88) [16:55:06:774]: Cleaning up uninstalled install packages, if any exist
MSI (c) (1C:88) [16:55:06:774]: MainEngineThread is returning 1603
=== Verbose logging stopped: 24/11/2010  16:55:06 ===

3 Answers, 1 is accepted

Sort by
0
David Harris
Telerik team
answered on 24 Nov 2010, 08:58 PM
Hi Derek,

We definitely support upgrading a previous Community edition installation. It looks like you have encountered a bug in the installer. Several SqlServer DLLs which are required for us to perform actions against the SQL Server are not present on the machine to which you are running the installer, causing it to fail. We had a user encounter this issue several months ago and believed we had fixed the installer so that it would include copies of the necessary DLLs, but it appears that the fix may not be all-inclusive.

I'm guessing you must be installing this new version of TeamPulse on a different front-end (IIS) server than your previous community edition, otherwise you likely would have encountered this error previously. Is this the case? This is perfectly acceptable I'm just trying to make sure I understand the scenario so that we can attempt to replicate and fix whatever bug may be lurking in the installer.

In the meantime, we have a workaround for you.

Attached to this post you will find a zip file containing several files. If you extract these files to a folder on the machine you are installing to and then run the register-smo-assemblies.bat file, it will install the 6 missing DLLs into your Global Assembly Cache, allowing the existing installer to function correctly.

You should be able to run the installer just fine against your existing TeamPulse database, as the installer was unable to make any changes to the database due to the missing DLLs.

Please let us know if this resolves your issues and if my assumptions regarding your scenario are indeed correct. I have awarded you some Telerik points for your troubles.


Regards,
David Harris
the Telerik team
New release coming up this week! Sign up to see what's new in Telerik TeamPulse Q3 2010!
Thursday, November 18, 2010 2:00 PM - 3:00 PM EST: Register today!
0
Derek
Top achievements
Rank 1
answered on 26 Nov 2010, 07:15 PM
Hi David,
Thanks for looking into this - however the workaround didn't help.
So we ended up installing Sql 2008 R2 (standard edition) over the Sql 2008 (web edition) that we originally had, as we figured possibly some required components were missing from the web edition.

So, this at least seems to have helped, however it still isn't installing successfully for us.  The sql batch client error we were getting does appear to be fixed however and it seems at least it is able to attempt to modify the database as part of the upgrade. However, this still results in failure. For example from the log we spotted this:-

GO
 on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Failed to execute sql, exception details: Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. ---> System.Data.SqlClient.SqlException: 'DF__Historica__Versi__31B762FC' is not a constraint.
Could not drop constraint. See previous errors.
   at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
   --- End of inner exception stack trace ---
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand)
   at DatabaseExtensions.CustomActions.ExecuteSQL(Session session, Server server, String sql)
MSI (s) (88!74) [16:37:41:326]: PROPERTY CHANGE: Adding INSTALLERROR property. Its value is '**********'.
Result: Failure
Rolling back installation transaction...

So now we still haven't managed to upgrade TeamPulse to Q3, and our previous installation is no longer working as it appears to have been broken by the Q3 installer.

You mentioned that we appear to be installing on a new IIS front end, however this is not the case - we are simply running the Q3 installer on the same server that the original was installed to.  It's all on the one single server.  Possibly the Q3 in the process of upgrading has removed the original TeamPulse web and for some reason it wasn't restored to its original state when the installation failed.  Note that when the installer failed the first time, we would probably have run the installer several times before we decided to send you the log file - so the log file we sent you is not from the first time running the installer, but one of the subsequent re-runs - maybe that is why it appears to be installing on a new web.

Unfortunately, while we took a backup of the database before we started, we didn't take a snapshot of the server including the webs and application files, so it's difficult for us to get our old TeamPulse system working again?

So any more ideas or assistance would be most helpful.  What do you think would be the best route to having our system operational again? Should we install the original team pulse system (prior to Q3) assuming we can find the original installer, and then restore the database - would that be likely to work? Or should we persevere with with the Q3 troubleshooting?

In case it's of any help, I'm sending you the latest installation log file (sorry, these are rather big!) - this is from the run after installing Sql 2008 R2 standard edition plus the workaround files.

Regards

Derek

=== Verbose logging started: 26/11/2010  16:37:10  Build type: SHIP UNICODE 4.05.6002.00  Calling process: C:\Windows\system32\msiexec.exe ===
MSI (c) (84:D0) [16:37:10:541]: Resetting cached policy values
MSI (c) (84:D0) [16:37:10:541]: Machine policy value 'Debug' is 0
MSI (c) (84:D0) [16:37:10:541]: ******* RunEngine:
           ******* Product: Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
           ******* Action:
           ******* CommandLine: **********
MSI (c) (84:D0) [16:37:10:553]: Machine policy value 'DisableUserInstalls' is 0
MSI (c) (84:D0) [16:37:10:566]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 3: 2
MSI (c) (84:D0) [16:37:10:600]: SOFTWARE RESTRICTION POLICY: Verifying package --> 'C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi' against software restriction policy
MSI (c) (84:D0) [16:37:10:600]: SOFTWARE RESTRICTION POLICY: C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi has a digital signature
MSI (c) (84:D0) [16:37:10:772]: SOFTWARE RESTRICTION POLICY: C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi is permitted to run at the 'unrestricted' authorization level.
MSI (c) (84:D0) [16:37:10:815]: Cloaking enabled.
MSI (c) (84:D0) [16:37:10:815]: Attempting to enable all disabled privileges before calling Install on Server
MSI (c) (84:D0) [16:37:10:820]: End dialog not enabled
MSI (c) (84:D0) [16:37:10:820]: Original package ==> C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
MSI (c) (84:D0) [16:37:10:820]: Package we're running from ==> C:\Users\ADMINI~1\AppData\Local\Temp\2\27530f.msi
MSI (c) (84:D0) [16:37:10:823]: APPCOMPAT: looking for appcompat database entry with ProductCode '{02E84302-F860-462A-BF16-FE2D92A4A06A}'.
MSI (c) (84:D0) [16:37:10:823]: APPCOMPAT: no matching ProductCode found in database.
MSI (c) (84:D0) [16:37:10:826]: MSCOREE not loaded loading copy from system32
MSI (c) (84:D0) [16:37:10:829]: Machine policy value 'TransformsSecure' is 1
MSI (c) (84:D0) [16:37:10:829]: Machine policy value 'DisablePatch' is 0
MSI (c) (84:D0) [16:37:10:829]: Machine policy value 'AllowLockdownPatch' is 0
MSI (c) (84:D0) [16:37:10:829]: Machine policy value 'DisableLUAPatching' is 0
MSI (c) (84:D0) [16:37:10:829]: Machine policy value 'DisableFlyWeightPatching' is 0
MSI (c) (84:D0) [16:37:10:829]: APPCOMPAT: looking for appcompat database entry with ProductCode '{02E84302-F860-462A-BF16-FE2D92A4A06A}'.
MSI (c) (84:D0) [16:37:10:829]: APPCOMPAT: no matching ProductCode found in database.
MSI (c) (84:D0) [16:37:10:829]: Transforms are not secure.
MSI (c) (84:D0) [16:37:10:830]: PROPERTY CHANGE: Adding MsiLogFileLocation property. Its value is 'C:\teampulselog.txt'.
MSI (c) (84:D0) [16:37:10:830]: Command Line: CURRENTDIRECTORY=C:\ CLIENTUILEVEL=0 CLIENTPROCESSID=3716
MSI (c) (84:D0) [16:37:10:830]: PROPERTY CHANGE: Adding PackageCode property. Its value is '{99765709-1FEF-4648-A08B-9B16F74CFA8D}'.
MSI (c) (84:D0) [16:37:10:830]: Product Code passed to Engine.Initialize:           ''
MSI (c) (84:D0) [16:37:10:830]: Product Code from property table before transforms: '{02E84302-F860-462A-BF16-FE2D92A4A06A}'
MSI (c) (84:D0) [16:37:10:830]: Product Code from property table after transforms:  '{02E84302-F860-462A-BF16-FE2D92A4A06A}'
MSI (c) (84:D0) [16:37:10:830]: Product not registered: beginning first-time install
MSI (c) (84:D0) [16:37:10:830]: PROPERTY CHANGE: Adding ProductState property. Its value is '-1'.
MSI (c) (84:D0) [16:37:10:830]: Entering CMsiConfigurationManager::SetLastUsedSource.
MSI (c) (84:D0) [16:37:10:830]: User policy value 'SearchOrder' is 'nmu'
MSI (c) (84:D0) [16:37:10:830]: Adding new sources is allowed.
MSI (c) (84:D0) [16:37:10:830]: PROPERTY CHANGE: Adding PackagecodeChanging property. Its value is '1'.
MSI (c) (84:D0) [16:37:10:830]: Package name extracted from package path: 'Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'
MSI (c) (84:D0) [16:37:10:830]: Package to be registered: 'Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'
MSI (c) (84:D0) [16:37:10:831]: Note: 1: 2262 2: AdminProperties 3: -2147287038
MSI (c) (84:D0) [16:37:10:831]: Machine policy value 'DisableMsi' is 1
MSI (c) (84:D0) [16:37:10:831]: Machine policy value 'AlwaysInstallElevated' is 0
MSI (c) (84:D0) [16:37:10:831]: User policy value 'AlwaysInstallElevated' is 0
MSI (c) (84:D0) [16:37:10:831]: Running product '{02E84302-F860-462A-BF16-FE2D92A4A06A}' with user privileges: It's not assigned.
MSI (c) (84:D0) [16:37:10:831]: PROPERTY CHANGE: Adding CURRENTDIRECTORY property. Its value is 'C:\'.
MSI (c) (84:D0) [16:37:10:831]: PROPERTY CHANGE: Adding CLIENTUILEVEL property. Its value is '0'.
MSI (c) (84:D0) [16:37:10:831]: PROPERTY CHANGE: Adding CLIENTPROCESSID property. Its value is '3716'.
MSI (c) (84:D0) [16:37:10:831]: TRANSFORMS property is now:
MSI (c) (84:D0) [16:37:10:831]: PROPERTY CHANGE: Adding VersionDatabase property. Its value is '200'.
MSI (c) (84:D0) [16:37:10:831]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming
MSI (c) (84:D0) [16:37:10:831]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Favorites
MSI (c) (84:D0) [16:37:10:831]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts
MSI (c) (84:D0) [16:37:10:832]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Documents
MSI (c) (84:D0) [16:37:10:832]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
MSI (c) (84:D0) [16:37:10:832]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent
MSI (c) (84:D0) [16:37:10:832]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo
MSI (c) (84:D0) [16:37:10:832]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates
MSI (c) (84:D0) [16:37:10:832]: SHELL32::SHGetFolderPath returned: C:\ProgramData
MSI (c) (84:D0) [16:37:10:832]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Local
MSI (c) (84:D0) [16:37:10:833]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Pictures
MSI (c) (84:D0) [16:37:10:833]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
MSI (c) (84:D0) [16:37:10:833]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
MSI (c) (84:D0) [16:37:10:833]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
MSI (c) (84:D0) [16:37:10:833]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu
MSI (c) (84:D0) [16:37:10:833]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Desktop
MSI (c) (84:D0) [16:37:10:834]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
MSI (c) (84:D0) [16:37:10:834]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
MSI (c) (84:D0) [16:37:10:834]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs
MSI (c) (84:D0) [16:37:10:834]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu
MSI (c) (84:D0) [16:37:10:834]: SHELL32::SHGetFolderPath returned: C:\Users\Public\Desktop
MSI (c) (84:D0) [16:37:10:834]: SHELL32::SHGetFolderPath returned: C:\Windows\Fonts
MSI (c) (84:D0) [16:37:10:834]: Note: 1: 2898 2: MS Sans Serif 3: MS Sans Serif 4: 0 5: 16
MSI (c) (84:D0) [16:37:10:838]: MSI_LUA: Setting AdminUser property to 1 because this is the client or the user has already permitted elevation
MSI (c) (84:D0) [16:37:10:838]: MSI_LUA: Setting MsiRunningElevated property to 1 because the install is already running elevated.
MSI (c) (84:D0) [16:37:10:838]: PROPERTY CHANGE: Adding MsiRunningElevated property. Its value is '1'.
MSI (c) (84:D0) [16:37:10:838]: PROPERTY CHANGE: Adding Privileged property. Its value is '1'.
MSI (c) (84:D0) [16:37:10:839]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\MS Setup (ACME)\User Info 3: 2
MSI (c) (84:D0) [16:37:10:839]: PROPERTY CHANGE: Adding USERNAME property. Its value is 'Windows User'.
MSI (c) (84:D0) [16:37:10:839]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\MS Setup (ACME)\User Info 3: 2
MSI (c) (84:D0) [16:37:10:839]: PROPERTY CHANGE: Adding DATABASE property. Its value is 'C:\Users\ADMINI~1\AppData\Local\Temp\2\27530f.msi'.
MSI (c) (84:D0) [16:37:10:839]: PROPERTY CHANGE: Adding OriginalDatabase property. Its value is 'C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'.
MSI (c) (84:D0) [16:37:10:839]: Machine policy value 'MsiDisableEmbeddedUI' is 0
MSI (c) (84:D0) [16:37:10:839]: PROPERTY CHANGE: Adding SourceDir property. Its value is 'C:\'.
MSI (c) (84:D0) [16:37:10:839]: PROPERTY CHANGE: Adding SOURCEDIR property. Its value is 'C:\'.
MSI (c) (84:B0) [16:37:10:840]: PROPERTY CHANGE: Adding VersionHandler property. Its value is '4.05'.
=== Logging started: 26/11/2010  16:37:10 ===
MSI (c) (84:D0) [16:37:10:845]: Note: 1: 2205 2:  3: PatchPackage
MSI (c) (84:D0) [16:37:10:845]: Machine policy value 'DisableRollback' is 0
MSI (c) (84:D0) [16:37:10:845]: User policy value 'DisableRollback' is 0
MSI (c) (84:D0) [16:37:10:845]: PROPERTY CHANGE: Adding UILevel property. Its value is '5'.
MSI (c) (84:D0) [16:37:10:846]: PROPERTY CHANGE: Adding ACTION property. Its value is 'INSTALL'.
MSI (c) (84:D0) [16:37:10:846]: Doing action: INSTALL
Action 16:37:10: INSTALL.
Action start 16:37:10: INSTALL.
MSI (c) (84:D0) [16:37:10:847]: UI Sequence table 'InstallUISequence' is present and populated.
MSI (c) (84:D0) [16:37:10:847]: Running UISequence
MSI (c) (84:D0) [16:37:10:847]: PROPERTY CHANGE: Adding EXECUTEACTION property. Its value is 'INSTALL'.
MSI (c) (84:D0) [16:37:10:847]: Doing action: FindRelatedProducts
Action 16:37:10: FindRelatedProducts. Searching for related applications
Action start 16:37:10: FindRelatedProducts.
Action ended 16:37:10: FindRelatedProducts. Return value 1.
MSI (c) (84:D0) [16:37:10:848]: Doing action: PrepareDlgTelerik
Action 16:37:10: PrepareDlgTelerik.
Action start 16:37:10: PrepareDlgTelerik.
Info 2898. For Telerik_Font_SubTitle textstyle, the system created a 'Arial' font, in 1 character set, of 14 pixels height.
Info 2898. For Telerik_Font_MidSizeText textstyle, the system created a 'Arial' font, in 1 character set, of 15 pixels height.
Info 2898. For Telerik_Font_LargeText textstyle, the system created a 'Arial' font, in 1 character set, of 27 pixels height.
Info 2898. For Telerik_Font_VersionInfo textstyle, the system created a 'Microsoft Sans Serif' font, in 1 character set, of 12 pixels height.
Action 16:37:10: PrepareDlgTelerik. Dialog created
Action ended 16:37:10: PrepareDlgTelerik. Return value 1.
MSI (c) (84:D0) [16:37:10:873]: Doing action: SetCOMPANYNAME
Action 16:37:10: SetCOMPANYNAME.
Action start 16:37:10: SetCOMPANYNAME.
MSI (c) (84:D0) [16:37:10:876]: PROPERTY CHANGE: Adding COMPANYNAME property. Its value is 'TeamPulse'.
Action ended 16:37:10: SetCOMPANYNAME. Return value 1.
MSI (c) (84:D0) [16:37:10:876]: Doing action: AppSearch
Action 16:37:10: AppSearch. Searching for installed applications
Action start 16:37:10: AppSearch.
AppSearch: Property: ASPNET, Signature: ASPNETS
MSI (c) (84:D0) [16:37:10:878]: PROPERTY CHANGE: Adding ASPNET property. Its value is '#1'.
AppSearch: Property: ASPNET64, Signature: ASPNETS64
MSI (c) (84:D0) [16:37:10:879]: PROPERTY CHANGE: Adding ASPNET64 property. Its value is '#1'.
AppSearch: Property: IIS7ADMINSVC, Signature: IIS7ADMINSVCS
MSI (c) (84:D0) [16:37:10:881]: PROPERTY CHANGE: Adding IIS7ADMINSVC property. Its value is '#1'.
AppSearch: Property: IIS7ADMINSVC64, Signature: IIS7ADMINSVCS64
MSI (c) (84:D0) [16:37:10:882]: PROPERTY CHANGE: Adding IIS7ADMINSVC64 property. Its value is '#1'.
AppSearch: Property: IIS7MGMTCONSOLE, Signature: IIS7MGMTCONSOLES
MSI (c) (84:D0) [16:37:10:883]: PROPERTY CHANGE: Adding IIS7MGMTCONSOLE property. Its value is '#1'.
AppSearch: Property: IIS7MGMTCONSOLE64, Signature: IIS7MGMTCONSOLES64
MSI (c) (84:D0) [16:37:10:884]: PROPERTY CHANGE: Adding IIS7MGMTCONSOLE64 property. Its value is '#1'.
AppSearch: Property: IIS7WINDOWSAUTH, Signature: IIS7WINDOWSAUTH
MSI (c) (84:D0) [16:37:10:885]: PROPERTY CHANGE: Adding IIS7WINDOWSAUTH property. Its value is '#1'.
AppSearch: Property: IIS7WINDOWSAUTH64, Signature: IIS7WINDOWSAUTH64
MSI (c) (84:D0) [16:37:10:886]: PROPERTY CHANGE: Adding IIS7WINDOWSAUTH64 property. Its value is '#1'.
AppSearch: Property: TEAMEXPLORER2010, Signature: TEAMEXPLORER2010
MSI (c) (84:D0) [16:37:10:888]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\InstalledProducts\Team Explorer 3: 2
AppSearch: Property: TEAMEXPLORER2010_64, Signature: TEAMEXPLORER2010_64
MSI (c) (84:D0) [16:37:10:889]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\InstalledProducts\Team Explorer 3: 2
AppSearch: Property: DEFAULTDOCUMENT, Signature: defDoc
MSI (c) (84:D0) [16:37:10:890]: PROPERTY CHANGE: Adding DEFAULTDOCUMENT property. Its value is '#1'.
AppSearch: Property: DEFAULTDOCUMENT64, Signature: defDoc64
MSI (c) (84:D0) [16:37:10:891]: PROPERTY CHANGE: Adding DEFAULTDOCUMENT64 property. Its value is '#1'.
AppSearch: Property: HTTPREDIRECTION, Signature: httpRed
MSI (c) (84:D0) [16:37:10:892]: PROPERTY CHANGE: Adding HTTPREDIRECTION property. Its value is '#1'.
AppSearch: Property: HTTPREDIRECTION64, Signature: httpRed64
MSI (c) (84:D0) [16:37:10:893]: PROPERTY CHANGE: Adding HTTPREDIRECTION64 property. Its value is '#1'.
AppSearch: Property: STATICCONTENT, Signature: staticCon
MSI (c) (84:D0) [16:37:10:894]: PROPERTY CHANGE: Adding STATICCONTENT property. Its value is '#1'.
AppSearch: Property: STATICCONTENT64, Signature: staticCon64
MSI (c) (84:D0) [16:37:10:896]: PROPERTY CHANGE: Adding STATICCONTENT64 property. Its value is '#1'.
AppSearch: Property: NETFRAMEWORK40, Signature: Net40Key
MSI (c) (84:D0) [16:37:10:897]: PROPERTY CHANGE: Adding NETFRAMEWORK40 property. Its value is 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\'.
AppSearch: Property: INSTALLLOCATION, Signature: InstallLocationRegistry
MSI (c) (84:D0) [16:37:10:898]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Telerik\Telerik TeamPulse 3: 2
AppSearch: Property: NETSH, Signature: Netshexe
MSI (c) (84:D0) [16:37:10:899]: Note: 1: 1322 2: 
MSI (c) (84:D0) [16:37:10:899]: Note: 1: 1322 2: 
MSI (c) (84:D0) [16:37:10:900]: PROPERTY CHANGE: Adding NETSH property. Its value is 'C:\Windows\system32\Netsh.exe'.
AppSearch: Property: IISMAJORVERSION, Signature: IIsMajorVersionSearch
MSI (c) (84:D0) [16:37:10:901]: PROPERTY CHANGE: Adding IISMAJORVERSION property. Its value is '#7'.
AppSearch: Property: IISMINORVERSION, Signature: IIsMinorVersionSearch
MSI (c) (84:D0) [16:37:10:902]: PROPERTY CHANGE: Adding IISMINORVERSION property. Its value is '#0'.
Action ended 16:37:10: AppSearch. Return value 1.
MSI (c) (84:D0) [16:37:10:902]: Doing action: ValidateProductID
Action 16:37:10: ValidateProductID.
Action start 16:37:10: ValidateProductID.
Action ended 16:37:10: ValidateProductID. Return value 1.
MSI (c) (84:D0) [16:37:10:904]: Doing action: CostInitialize
Action 16:37:10: CostInitialize. Computing space requirements
Action start 16:37:10: CostInitialize.
MSI (c) (84:D0) [16:37:10:906]: Machine policy value 'MaxPatchCacheSize' is 10
MSI (c) (84:D0) [16:37:10:907]: PROPERTY CHANGE: Adding ROOTDRIVE property. Its value is 'C:\'.
MSI (c) (84:D0) [16:37:10:907]: PROPERTY CHANGE: Adding CostingComplete property. Its value is '0'.
Action ended 16:37:10: CostInitialize. Return value 1.
MSI (c) (84:D0) [16:37:10:907]: Doing action: FileCost
Action 16:37:10: FileCost. Computing space requirements
Action start 16:37:10: FileCost.
MSI (c) (84:D0) [16:37:10:909]: Note: 1: 2205 2:  3: MsiAssembly
MSI (c) (84:D0) [16:37:10:909]: Note: 1: 2205 2:  3: Class
MSI (c) (84:D0) [16:37:10:909]: Note: 1: 2205 2:  3: Extension
MSI (c) (84:D0) [16:37:10:909]: Note: 1: 2205 2:  3: TypeLib
Action ended 16:37:10: FileCost. Return value 1.
MSI (c) (84:D0) [16:37:10:909]: Doing action: CostFinalize
Action 16:37:10: CostFinalize. Computing space requirements
Action start 16:37:10: CostFinalize.
MSI (c) (84:D0) [16:37:10:911]: PROPERTY CHANGE: Adding OutOfDiskSpace property. Its value is '0'.
MSI (c) (84:D0) [16:37:10:911]: PROPERTY CHANGE: Adding OutOfNoRbDiskSpace property. Its value is '0'.
MSI (c) (84:D0) [16:37:10:911]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceAvailable property. Its value is '0'.
MSI (c) (84:D0) [16:37:10:911]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRequired property. Its value is '0'.
MSI (c) (84:D0) [16:37:10:911]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRemaining property. Its value is '0'.
MSI (c) (84:D0) [16:37:10:911]: Note: 1: 2205 2:  3: Patch
MSI (c) (84:D0) [16:37:10:911]: Note: 1: 2205 2:  3: Condition
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding TARGETDIR property. Its value is 'C:\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding ProgramTelerikDir property. Its value is 'C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding ProgramMenuDir property. Its value is 'C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding TelerikFolder property. Its value is 'C:\Program Files\Telerik\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding INSTALLLOCATION property. Its value is 'C:\Program Files\Telerik\TeamPulse\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding logs.Folder property. Its value is 'C:\Program Files\Telerik\TeamPulse\Logs\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding IntegrationService property. Its value is 'C:\Program Files\Telerik\TeamPulse\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding Release property. Its value is 'C:\Program Files\Telerik\TeamPulse\IntegrationService\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding MappingDefaults property. Its value is 'C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding UserManagementRoot property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding Views property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding Welcome property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding Activation property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding Shared property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding License property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding Home property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding EditorTemplates property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding Scripts property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding Images property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Images\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding Content property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Content\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding bin property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\bin\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding WebRoot property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\'.
MSI (c) (84:D0) [16:37:10:912]: PROPERTY CHANGE: Adding binFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\bin\'.
MSI (c) (84:D0) [16:37:10:913]: PROPERTY CHANGE: Adding ClientBinFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\'.
MSI (c) (84:D0) [16:37:10:913]: PROPERTY CHANGE: Adding FeedsFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\'.
MSI (c) (84:D0) [16:37:10:913]: PROPERTY CHANGE: Adding ServiceFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Services\'.
MSI (c) (84:D0) [16:37:10:913]: PROPERTY CHANGE: Adding TempStorage.Folder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\'.
MSI (c) (84:D0) [16:37:10:913]: PROPERTY CHANGE: Adding ImagesFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Images\'.
MSI (c) (84:D0) [16:37:10:913]: PROPERTY CHANGE: Adding DownloadFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Download\'.
MSI (c) (84:D0) [16:37:10:913]: PROPERTY CHANGE: Adding CommonFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Common\'.
MSI (c) (84:D0) [16:37:10:913]: Target path resolution complete. Dumping Directory table...
MSI (c) (84:D0) [16:37:10:913]: Note: target paths subject to change (via custom actions or browsing)
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: TARGETDIR    , Object: C:\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: WindowsFolder    , Object: C:\Windows\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: ProgramMenuFolder    , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: ProgramTelerikDir    , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: ProgramMenuDir   , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: ProgramFilesFolder   , Object: C:\Program Files\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: TelerikFolder    , Object: C:\Program Files\Telerik\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: INSTALLLOCATION  , Object: C:\Program Files\Telerik\TeamPulse\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: logs.Folder  , Object: C:\Program Files\Telerik\TeamPulse\Logs\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: IntegrationService   , Object: C:\Program Files\Telerik\TeamPulse\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: Release  , Object: C:\Program Files\Telerik\TeamPulse\IntegrationService\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: MappingDefaults  , Object: C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: UserManagementRoot   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: Views    , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: Welcome  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: Activation   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: Shared   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: License  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: Home , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: EditorTemplates  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: Scripts  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: Images   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Images\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: Content  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Content\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: bin  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\bin\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: WebRoot  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: binFolder    , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\bin\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: ClientBinFolder  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: FeedsFolder  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: ServiceFolder    , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Services\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: TempStorage.Folder   , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: ImagesFolder , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Images\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: DownloadFolder   , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Download\
MSI (c) (84:D0) [16:37:10:913]: Dir (target): Key: CommonFolder , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Common\
MSI (c) (84:D0) [16:37:10:913]: PROPERTY CHANGE: Adding INSTALLLEVEL property. Its value is '1'.
MSI (c) (84:D0) [16:37:10:913]: Note: 1: 2205 2:  3: MsiAssembly
MSI (c) (84:D0) [16:37:10:913]: Note: 1: 2228 2:  3: MsiAssembly 4:  SELECT `MsiAssembly`.`Attributes`, `MsiAssembly`.`File_Application`, `MsiAssembly`.`File_Manifest`,  `Component`.`KeyPath` FROM `MsiAssembly`, `Component` WHERE  `MsiAssembly`.`Component_` = `Component`.`Component` AND `MsiAssembly`.`Component_` = ?
Action ended 16:37:10: CostFinalize. Return value 1.
MSI (c) (84:D0) [16:37:10:915]: Skipping action: MaintenanceWelcomeDlgTelerik (condition is false)
MSI (c) (84:D0) [16:37:10:915]: Skipping action: ResumeDlgTelerik (condition is false)
MSI (c) (84:D0) [16:37:10:915]: Skipping action: UpgradeDlgTelerik (condition is false)
MSI (c) (84:D0) [16:37:10:915]: Doing action: WelcomeDlgTelerik
Action 16:37:10: WelcomeDlgTelerik.
Action start 16:37:10: WelcomeDlgTelerik.
Info 2898. For Telerik_Warning textstyle, the system created a 'Arial' font, in 1 character set, of 15 pixels height.
Info 2898. For Telerik_Font_Title textstyle, the system created a 'Arial' font, in 1 character set, of 15 pixels height.
Action 16:37:10: WelcomeDlgTelerik. Dialog created
MSI (c) (84:88) [16:37:10:936]: Note: 1: 2205 2:  3: _RemoveFilePath
MSI (c) (84:88) [16:37:10:945]: PROPERTY CHANGE: Modifying CostingComplete property. Its current value is '0'. Its new value: '1'.
MSI (c) (84:88) [16:37:10:945]: Note: 1: 2205 2:  3: BindImage
MSI (c) (84:88) [16:37:10:945]: Note: 1: 2205 2:  3: ProgId
MSI (c) (84:88) [16:37:10:946]: Note: 1: 2205 2:  3: PublishComponent
MSI (c) (84:88) [16:37:10:946]: Note: 1: 2205 2:  3: SelfReg
MSI (c) (84:88) [16:37:10:946]: Note: 1: 2205 2:  3: Extension
MSI (c) (84:88) [16:37:10:946]: Note: 1: 2205 2:  3: Font
MSI (c) (84:88) [16:37:10:946]: Note: 1: 2205 2:  3: Class
MSI (c) (84:88) [16:37:10:946]: Note: 1: 2727 2: 
MSI (c) (84:B0) [16:37:12:670]: PROPERTY CHANGE: Modifying INSTALLLEVEL property. Its current value is '1'. Its new value: '1000'.
MSI (c) (84:B0) [16:37:12:673]: Note: 1: 2727 2: 
MSI (c) (84:B0) [16:37:12:673]: Doing action: CheckCorrectVersionOfDotNet
Action 16:37:12: CheckCorrectVersionOfDotNet.
Action start 16:37:12: CheckCorrectVersionOfDotNet.
MSI (c) (84:00) [16:37:12:684]: Invoking remote custom action. DLL: C:\Users\ADMINI~1\AppData\Local\Temp\2\MSI5B5B.tmp, Entrypoint: CheckCorrectVersionOfDotNet
MSI (c) (84:BC) [16:37:12:685]: Cloaking enabled.
MSI (c) (84:BC) [16:37:12:685]: Attempting to enable all disabled privileges before calling Install on Server
MSI (c) (84:BC) [16:37:12:685]: Connected to service for CA interface.
MSI (c) (84!0C) [16:37:13:178]: PROPERTY CHANGE: Modifying ISCORRECTNETFRAMEWORK40VERSION property. Its current value is '0'. Its new value: '1'.
Action ended 16:37:13: CheckCorrectVersionOfDotNet. Return value 1.
Action 16:37:13: InstallRequirementsTelerik. Dialog created
Action 16:37:14: LicenseAgreementDlgTelerik. Dialog created
MSI (c) (84:B0) [16:37:15:543]: PROPERTY CHANGE: Adding LicenseAccepted property. Its value is '1'.
MSI (c) (84:B0) [16:37:16:303]: Doing action: GetUserInformation
Action 16:37:16: GetUserInformation.
Action start 16:37:16: GetUserInformation.
MSI (c) (84:60) [16:37:16:313]: Invoking remote custom action. DLL: C:\Users\ADMINI~1\AppData\Local\Temp\2\MSI697F.tmp, Entrypoint: GetUserInformation
MSI (c) (84!80) [16:37:16:653]: PROPERTY CHANGE: Deleting USERNAME property. Its current value is 'Windows User'.
MSI (c) (84!80) [16:37:16:654]: PROPERTY CHANGE: Adding DOMAIN property. Its value is 'BUMBLEBEE'.
MSI (c) (84!80) [16:37:16:654]: PROPERTY CHANGE: Adding DB_DOMAIN property. Its value is 'BUMBLEBEE'.
MSI (c) (84!80) [16:37:16:654]: PROPERTY CHANGE: Adding USERNAME property. Its value is 'Administrator'.
MSI (c) (84!80) [16:37:16:654]: PROPERTY CHANGE: Adding DB_USERNAME property. Its value is 'Administrator'.
Action ended 16:37:18: GetUserInformation. Return value 1.
Info 2898. For Telerik_Font_MidSizeText__UL textstyle, the system created a 'Arial' font, in 0 character set, of 15 pixels height.
Action 16:37:18: UserInfoDlgTelerik. Dialog created
MSI (c) (84:B0) [16:37:20:054]: PROPERTY CHANGE: Modifying USERINFORBGSELECTION property. Its current value is '1'. Its new value: '0'.
Action 16:37:21: SetupTypeDlgTelerik. Dialog created
MSI (c) (84:B0) [16:37:22:014]: PROPERTY CHANGE: Adding WixUI_InstallMode property. Its value is 'InstallComplete'.
MSI (c) (84:B0) [16:37:22:017]: Note: 1: 2727 2: 
Info 2898. For WixUI_Font_Title textstyle, the system created a 'Arial' font, in 1 character set, of 15 pixels height.
Action 16:37:22: ConnectToDB. Dialog created
MSI (c) (84:B0) [16:37:27:895]: PROPERTY CHANGE: Adding DB_PASSWORD property. Its value is '**********'.
MSI (c) (84:B0) [16:37:31:375]: PROPERTY CHANGE: Modifying DB_PATH property. Its current value is '(local)\sqlexpress'. Its new value: 'BUMBLEBEE'.
MSI (c) (84:B0) [16:37:31:463]: PROPERTY CHANGE: Modifying SERVER_CONNECTION_STRING property. Its current value is '**********'. Its new value: '**********'.
MSI (c) (84:B0) [16:37:31:463]: Doing action: TestConnection
Action 16:37:31: TestConnection.
Action start 16:37:31: TestConnection.
MSI (c) (84:24) [16:37:31:474]: Invoking remote custom action. DLL: C:\Users\ADMINI~1\AppData\Local\Temp\2\MSIA4BB.tmp, Entrypoint: TestDatabaseConnection
MSI (c) (84!8C) [16:37:32:442]: PROPERTY CHANGE: Modifying DB_CONNECTION_RESULT property. Its current value is '-1'. Its new value: '1'.
Action ended 16:37:34: TestConnection. Return value 1.
MSI (c) (84:B0) [16:37:34:151]: PROPERTY CHANGE: Modifying DB_LAST_CONNECTION_RESULT property. Its current value is '-1'. Its new value: '1'.
MSI (c) (84:B0) [16:37:35:151]: PROPERTY CHANGE: Modifying TEAMPULSE_CONNECTION_STRING property. Its current value is '**********'. Its new value: '**********'.
MSI (c) (84:B0) [16:37:35:152]: Doing action: GetUniqueID
Action 16:37:35: GetUniqueID.
Action start 16:37:35: GetUniqueID.
MSI (c) (84:D4) [16:37:35:162]: Invoking remote custom action. DLL: C:\Users\ADMINI~1\AppData\Local\Temp\2\MSIB31E.tmp, Entrypoint: GetMachineID
MSI (c) (84!D8) [16:37:35:461]: PROPERTY CHANGE: Adding MACHINEID property. Its value is '**********'.
Action ended 16:37:35: GetUniqueID. Return value 1.
MSI (c) (84:B0) [16:37:35:754]: PROPERTY CHANGE: Modifying DB_CONNECTION_RESULT property. Its current value is '1'. Its new value: '-1'.
Info 2898. For Telerik_Font_TeamPulse textstyle, the system created a 'Arial' font, in 1 character set, of 18 pixels height.
Action 16:37:35: VerifyReadyDlgTelerik. Dialog created
MSI (c) (84:B0) [16:37:36:279]: Note: 1: 2727 2: 
MSI (c) (84:B0) [16:37:36:794]: Note: 1: 2727 2: 
Action ended 16:37:36: WelcomeDlgTelerik. Return value 1.
MSI (c) (84:D0) [16:37:36:862]: Doing action: ProgressDlgTelerik
Action 16:37:36: ProgressDlgTelerik.
Action start 16:37:36: ProgressDlgTelerik.
Action 16:37:36: ProgressDlgTelerik. Dialog created
Action ended 16:37:36: ProgressDlgTelerik. Return value 1.
MSI (c) (84:D0) [16:37:36:938]: Doing action: ExecuteAction
Action 16:37:36: ExecuteAction.
Action start 16:37:36: ExecuteAction.
MSI (c) (84:D0) [16:37:36:939]: PROPERTY CHANGE: Adding SECONDSEQUENCE property. Its value is '1'.
MSI (c) (84:D0) [16:37:36:939]: Grabbed execution mutex.
MSI (c) (84:D0) [16:37:36:939]: Incrementing counter to disable shutdown. Counter after increment: 0
MSI (c) (84:D0) [16:37:36:941]: Switching to server: ASPNET="#1" ASPNET64="#1" IIS7ADMINSVC="#1" IIS7ADMINSVC64="#1" IIS7MGMTCONSOLE="#1" IIS7MGMTCONSOLE64="#1" IIS7WINDOWSAUTH="#1" IIS7WINDOWSAUTH64="#1" DEFAULTDOCUMENT="#1" DEFAULTDOCUMENT64="#1" HTTPREDIRECTION="#1" HTTPREDIRECTION64="#1" STATICCONTENT="#1" STATICCONTENT64="#1" NETFRAMEWORK40="C:\Windows\Microsoft.NET\Framework\v4.0.30319\" INSTALLLOCATION="C:\Program Files\Telerik\TeamPulse\" NETSH="C:\Windows\system32\Netsh.exe" IISMAJORVERSION="#7" IISMINORVERSION="#0" USERINFORBGSELECTION="0" DOMAIN="BUMBLEBEE" USERNAME="Administrator" DB_PATH="BUMBLEBEE" DB_DOMAIN="BUMBLEBEE" DB_USERNAME="Administrator" DB_PASSWORD=********** COMPANYNAME="TeamPulse" TARGETDIR="C:\" ISCORRECTNETFRAMEWORK40VERSION="1" TEAMPULSE_CONNECTION_STRING=********** SERVER_CONNECTION_STRING=********** DB_LAST_CONNECTION_RESULT="1" CURRENTDIRECTORY="C:\" CLIENTUILEVEL="0" CLIENTPROCESSID="3716" SOURCEDIR="C:\" ACTION="INSTALL" EXECUTEACTION="INSTALL" SECONDSEQUENCE="1" ROOTDRIVE="C:\" INSTALLLEVEL="1000" MACHINEID=**********  ADDLOCAL=ProductFeature 
MSI (s) (88:C0) [16:37:36:954]: Running installation inside multi-package transaction C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
MSI (s) (88:C0) [16:37:36:954]: Grabbed execution mutex.
MSI (s) (88:58) [16:37:36:955]: Resetting cached policy values
MSI (s) (88:58) [16:37:36:956]: Machine policy value 'Debug' is 0
MSI (s) (88:58) [16:37:36:956]: ******* RunEngine:
           ******* Product: C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
           ******* Action: INSTALL
           ******* CommandLine: **********
MSI (s) (88:58) [16:37:36:957]: Machine policy value 'DisableUserInstalls' is 0
MSI (s) (88:58) [16:37:36:975]: Machine policy value 'LimitSystemRestoreCheckpointing' is 0
MSI (s) (88:58) [16:37:36:975]: Note: 1: 1715 2: Telerik TeamPulse
MSI (s) (88:58) [16:37:36:976]: Calling SRSetRestorePoint API. dwRestorePtType: 0, dwEventType: 102, llSequenceNumber: 0, szDescription: "Installed Telerik TeamPulse".
MSI (s) (88:58) [16:37:36:976]: The call to SRSetRestorePoint API failed. Returned status: 0. GetLastError() returned: 127
MSI (s) (88:58) [16:37:36:977]: File will have security applied from OpCode.
MSI (s) (88:58) [16:37:37:067]: SOFTWARE RESTRICTION POLICY: Verifying package --> 'C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi' against software restriction policy
MSI (s) (88:58) [16:37:37:067]: SOFTWARE RESTRICTION POLICY: C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi has a digital signature
MSI (s) (88:58) [16:37:37:227]: SOFTWARE RESTRICTION POLICY: C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi is permitted to run at the 'unrestricted' authorization level.
MSI (s) (88:58) [16:37:37:227]: End dialog not enabled
MSI (s) (88:58) [16:37:37:227]: Original package ==> C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
MSI (s) (88:58) [16:37:37:227]: Package we're running from ==> C:\Windows\Installer\27ba3a.msi
MSI (s) (88:58) [16:37:37:230]: APPCOMPAT: looking for appcompat database entry with ProductCode '{02E84302-F860-462A-BF16-FE2D92A4A06A}'.
MSI (s) (88:58) [16:37:37:230]: APPCOMPAT: no matching ProductCode found in database.
MSI (s) (88:58) [16:37:37:233]: MSCOREE not loaded loading copy from system32
MSI (s) (88:58) [16:37:37:236]: Machine policy value 'TransformsSecure' is 1
MSI (s) (88:58) [16:37:37:236]: Machine policy value 'DisablePatch' is 0
MSI (s) (88:58) [16:37:37:236]: Machine policy value 'AllowLockdownPatch' is 0
MSI (s) (88:58) [16:37:37:236]: Machine policy value 'DisableLUAPatching' is 0
MSI (s) (88:58) [16:37:37:236]: Machine policy value 'DisableFlyWeightPatching' is 0
MSI (s) (88:58) [16:37:37:237]: APPCOMPAT: looking for appcompat database entry with ProductCode '{02E84302-F860-462A-BF16-FE2D92A4A06A}'.
MSI (s) (88:58) [16:37:37:237]: APPCOMPAT: no matching ProductCode found in database.
MSI (s) (88:58) [16:37:37:237]: Transforms are not secure.
MSI (s) (88:58) [16:37:37:237]: PROPERTY CHANGE: Adding MsiLogFileLocation property. Its value is 'C:\teampulselog.txt'.
MSI (s) (88:58) [16:37:37:238]: Command Line: ASPNET=#1 ASPNET64=#1 IIS7ADMINSVC=#1 IIS7ADMINSVC64=#1 IIS7MGMTCONSOLE=#1 IIS7MGMTCONSOLE64=#1 IIS7WINDOWSAUTH=#1 IIS7WINDOWSAUTH64=#1 DEFAULTDOCUMENT=#1 DEFAULTDOCUMENT64=#1 HTTPREDIRECTION=#1 HTTPREDIRECTION64=#1 STATICCONTENT=#1 STATICCONTENT64=#1 NETFRAMEWORK40=C:\Windows\Microsoft.NET\Framework\v4.0.30319\ INSTALLLOCATION=C:\Program Files\Telerik\TeamPulse\ NETSH=C:\Windows\system32\Netsh.exe IISMAJORVERSION=#7 IISMINORVERSION=#0 USERINFORBGSELECTION=0 DOMAIN=BUMBLEBEE USERNAME=Administrator DB_PATH=BUMBLEBEE DB_DOMAIN=BUMBLEBEE DB_USERNAME=Administrator DB_PASSWORD=********** COMPANYNAME=TeamPulse TARGETDIR=C:\ ISCORRECTNETFRAMEWORK40VERSION=1 TEAMPULSE_CONNECTION_STRING=********** SERVER_CONNECTION_STRING=********** DB_LAST_CONNECTION_RESULT=1 CURRENTDIRECTORY=C:\ CLIENTUILEVEL=0 CLIENTPROCESSID=3716 SOURCEDIR=C:\ ACTION=INSTALL EXECUTEACTION=INSTALL SECONDSEQUENCE=1 ROOTDRIVE=C:\ INSTALLLEVEL=1000 MACHINEID=********** ADDLOCAL=ProductFeature ACTION=INSTALL
MSI (s) (88:58) [16:37:37:238]: PROPERTY CHANGE: Adding PackageCode property. Its value is '{99765709-1FEF-4648-A08B-9B16F74CFA8D}'.
MSI (s) (88:58) [16:37:37:238]: Product Code passed to Engine.Initialize:           ''
MSI (s) (88:58) [16:37:37:238]: Product Code from property table before transforms: '{02E84302-F860-462A-BF16-FE2D92A4A06A}'
MSI (s) (88:58) [16:37:37:238]: Product Code from property table after transforms:  '{02E84302-F860-462A-BF16-FE2D92A4A06A}'
MSI (s) (88:58) [16:37:37:238]: Product not registered: beginning first-time install
MSI (s) (88:58) [16:37:37:238]: Product {02E84302-F860-462A-BF16-FE2D92A4A06A} is not managed.
MSI (s) (88:58) [16:37:37:238]: MSI_LUA: Credential prompt not required, user is an admin
MSI (s) (88:58) [16:37:37:238]: PROPERTY CHANGE: Adding ProductState property. Its value is '-1'.
MSI (s) (88:58) [16:37:37:238]: Entering CMsiConfigurationManager::SetLastUsedSource.
MSI (s) (88:58) [16:37:37:238]: User policy value 'SearchOrder' is 'nmu'
MSI (s) (88:58) [16:37:37:238]: Adding new sources is allowed.
MSI (s) (88:58) [16:37:37:238]: PROPERTY CHANGE: Adding PackagecodeChanging property. Its value is '1'.
MSI (s) (88:58) [16:37:37:239]: Package name extracted from package path: 'Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'
MSI (s) (88:58) [16:37:37:239]: Package to be registered: 'Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'
MSI (s) (88:58) [16:37:37:240]: Note: 1: 2262 2: AdminProperties 3: -2147287038
MSI (s) (88:58) [16:37:37:240]: Machine policy value 'DisableMsi' is 1
MSI (s) (88:58) [16:37:37:240]: Machine policy value 'AlwaysInstallElevated' is 0
MSI (s) (88:58) [16:37:37:240]: User policy value 'AlwaysInstallElevated' is 0
MSI (s) (88:58) [16:37:37:240]: Running product '{02E84302-F860-462A-BF16-FE2D92A4A06A}' with user privileges: It's not assigned.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding ASPNET property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding ASPNET64 property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding IIS7ADMINSVC property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding IIS7ADMINSVC64 property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding IIS7MGMTCONSOLE property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding IIS7MGMTCONSOLE64 property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding IIS7WINDOWSAUTH property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding IIS7WINDOWSAUTH64 property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding DEFAULTDOCUMENT property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding DEFAULTDOCUMENT64 property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding HTTPREDIRECTION property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding HTTPREDIRECTION64 property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding STATICCONTENT property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding STATICCONTENT64 property. Its value is '#1'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding NETFRAMEWORK40 property. Its value is 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\'.
MSI (s) (88:58) [16:37:37:240]: PROPERTY CHANGE: Adding INSTALLLOCATION property. Its value is 'C:\Program Files\Telerik\TeamPulse\'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding NETSH property. Its value is 'C:\Windows\system32\Netsh.exe'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding IISMAJORVERSION property. Its value is '#7'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding IISMINORVERSION property. Its value is '#0'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Modifying USERINFORBGSELECTION property. Its current value is '1'. Its new value: '0'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding DOMAIN property. Its value is 'BUMBLEBEE'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding USERNAME property. Its value is 'Administrator'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Modifying DB_PATH property. Its current value is '(local)\sqlexpress'. Its new value: 'BUMBLEBEE'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding DB_DOMAIN property. Its value is 'BUMBLEBEE'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding DB_USERNAME property. Its value is 'Administrator'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding DB_PASSWORD property. Its value is '**********'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding COMPANYNAME property. Its value is 'TeamPulse'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding TARGETDIR property. Its value is 'C:\'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Modifying ISCORRECTNETFRAMEWORK40VERSION property. Its current value is '0'. Its new value: '1'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Modifying TEAMPULSE_CONNECTION_STRING property. Its current value is '**********'. Its new value: '**********'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Modifying SERVER_CONNECTION_STRING property. Its current value is '**********'. Its new value: '**********'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Modifying DB_LAST_CONNECTION_RESULT property. Its current value is '-1'. Its new value: '1'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding CURRENTDIRECTORY property. Its value is 'C:\'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding CLIENTUILEVEL property. Its value is '0'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding CLIENTPROCESSID property. Its value is '3716'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding SOURCEDIR property. Its value is 'C:\'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding ACTION property. Its value is 'INSTALL'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding EXECUTEACTION property. Its value is 'INSTALL'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding SECONDSEQUENCE property. Its value is '1'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding ROOTDRIVE property. Its value is 'C:\'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding INSTALLLEVEL property. Its value is '1000'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding MACHINEID property. Its value is '**********'.
MSI (s) (88:58) [16:37:37:241]: PROPERTY CHANGE: Adding ADDLOCAL property. Its value is 'ProductFeature'.
MSI (s) (88:58) [16:37:37:241]: Machine policy value 'DisableAutomaticApplicationShutdown' is 0
MSI (s) (88:58) [16:37:37:243]: PROPERTY CHANGE: Adding MsiRestartManagerSessionKey property. Its value is '600e5f91e22f934f8a6584cf2ba2b0b5'.
MSI (s) (88:58) [16:37:37:243]: RESTART MANAGER: Session opened.
MSI (s) (88:58) [16:37:37:243]: Engine has iefSecondSequence set to true.
MSI (s) (88:58) [16:37:37:243]: TRANSFORMS property is now:
MSI (s) (88:58) [16:37:37:243]: PROPERTY CHANGE: Deleting SOURCEDIR property. Its current value is 'C:\'.
MSI (s) (88:58) [16:37:37:243]: PROPERTY CHANGE: Adding VersionDatabase property. Its value is '200'.
MSI (s) (88:58) [16:37:37:244]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming
MSI (s) (88:58) [16:37:37:245]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Favorites
MSI (s) (88:58) [16:37:37:246]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts
MSI (s) (88:58) [16:37:37:247]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Documents
MSI (s) (88:58) [16:37:37:248]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
MSI (s) (88:58) [16:37:37:249]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent
MSI (s) (88:58) [16:37:37:250]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo
MSI (s) (88:58) [16:37:37:251]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates
MSI (s) (88:58) [16:37:37:251]: SHELL32::SHGetFolderPath returned: C:\ProgramData
MSI (s) (88:58) [16:37:37:252]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Local
MSI (s) (88:58) [16:37:37:253]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Pictures
MSI (s) (88:58) [16:37:37:255]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
MSI (s) (88:58) [16:37:37:256]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
MSI (s) (88:58) [16:37:37:257]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
MSI (s) (88:58) [16:37:37:258]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu
MSI (s) (88:58) [16:37:37:259]: SHELL32::SHGetFolderPath returned: C:\Users\Administrator\Desktop
MSI (s) (88:58) [16:37:37:261]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
MSI (s) (88:58) [16:37:37:262]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
MSI (s) (88:58) [16:37:37:262]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu\Programs
MSI (s) (88:58) [16:37:37:264]: SHELL32::SHGetFolderPath returned: C:\ProgramData\Microsoft\Windows\Start Menu
MSI (s) (88:58) [16:37:37:265]: SHELL32::SHGetFolderPath returned: C:\Users\Public\Desktop
MSI (s) (88:58) [16:37:37:265]: SHELL32::SHGetFolderPath returned: C:\Windows\Fonts
MSI (s) (88:58) [16:37:37:265]: Note: 1: 2898 2: MS Sans Serif 3: MS Sans Serif 4: 0 5: 16
MSI (s) (88:58) [16:37:37:269]: MSI_LUA: Setting MsiRunningElevated property to 1 because the install is already running elevated.
MSI (s) (88:58) [16:37:37:270]: PROPERTY CHANGE: Adding MsiRunningElevated property. Its value is '1'.
MSI (s) (88:58) [16:37:37:270]: PROPERTY CHANGE: Adding Privileged property. Its value is '1'.
MSI (s) (88:58) [16:37:37:270]: PROPERTY CHANGE: Adding DATABASE property. Its value is 'C:\Windows\Installer\27ba3a.msi'.
MSI (s) (88:58) [16:37:37:270]: PROPERTY CHANGE: Adding OriginalDatabase property. Its value is 'C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi'.
MSI (s) (88:58) [16:37:37:270]: Machine policy value 'MsiDisableEmbeddedUI' is 0
MSI (s) (88:58) [16:37:37:270]: EEUI - Disabling MsiEmbeddedUI for service because it's not a quiet/basic install
MSI (s) (88:58) [16:37:37:270]: Note: 1: 2205 2:  3: PatchPackage
MSI (s) (88:58) [16:37:37:270]: Machine policy value 'DisableRollback' is 0
MSI (s) (88:58) [16:37:37:270]: User policy value 'DisableRollback' is 0
MSI (s) (88:58) [16:37:37:270]: PROPERTY CHANGE: Adding UILevel property. Its value is '5'.
MSI (s) (88:58) [16:37:37:271]: PROPERTY CHANGE: Adding Preselected property. Its value is '1'.
MSI (s) (88:58) [16:37:37:271]: Doing action: INSTALL
Action 16:37:37: INSTALL.
Action start 16:37:37: INSTALL.
MSI (s) (88:58) [16:37:37:272]: Running ExecuteSequence
MSI (s) (88:58) [16:37:37:272]: Doing action: FindRelatedProducts
Action 16:37:37: FindRelatedProducts. Searching for related applications
Action start 16:37:37: FindRelatedProducts.
MSI (s) (88:58) [16:37:37:274]: Skipping FindRelatedProducts action: already done on client side
Action ended 16:37:37: FindRelatedProducts. Return value 0.
MSI (s) (88:58) [16:37:37:274]: Skipping action: NoDowngrade (condition is false)
MSI (s) (88:58) [16:37:37:274]: Doing action: SetCOMPANYNAME
Action 16:37:37: SetCOMPANYNAME.
Action start 16:37:37: SetCOMPANYNAME.
Action ended 16:37:37: SetCOMPANYNAME. Return value 1.
MSI (s) (88:58) [16:37:37:276]: Doing action: AppSearch
Action 16:37:37: AppSearch. Searching for installed applications
Action start 16:37:37: AppSearch.
MSI (s) (88:58) [16:37:37:277]: Skipping AppSearch action: already done on client side
Action ended 16:37:37: AppSearch. Return value 0.
MSI (s) (88:58) [16:37:37:277]: Doing action: ValidateProductID
Action 16:37:37: ValidateProductID.
Action start 16:37:37: ValidateProductID.
Action ended 16:37:37: ValidateProductID. Return value 1.
MSI (s) (88:58) [16:37:37:279]: Doing action: CostInitialize
Action 16:37:37: CostInitialize. Computing space requirements
Action start 16:37:37: CostInitialize.
MSI (s) (88:58) [16:37:37:280]: Machine policy value 'MaxPatchCacheSize' is 10
MSI (s) (88:58) [16:37:37:281]: PROPERTY CHANGE: Adding CostingComplete property. Its value is '0'.
MSI (s) (88:58) [16:37:37:281]: Note: 1: 2205 2:  3: Patch
MSI (s) (88:58) [16:37:37:281]: Note: 1: 2205 2:  3: PatchPackage
MSI (s) (88:58) [16:37:37:281]: Note: 1: 2205 2:  3: MsiPatchHeaders
MSI (s) (88:58) [16:37:37:281]: Note: 1: 2205 2:  3: __MsiPatchFileList
MSI (s) (88:58) [16:37:37:281]: Note: 1: 2205 2:  3: PatchPackage
MSI (s) (88:58) [16:37:37:281]: Note: 1: 2228 2:  3: PatchPackage 4: SELECT `DiskId`, `PatchId`, `LastSequence` FROM `Media`, `PatchPackage` WHERE `Media`.`DiskId`=`PatchPackage`.`Media_` ORDER BY `DiskId` 
MSI (s) (88:58) [16:37:37:282]: Note: 1: 2205 2:  3: Patch
Action ended 16:37:37: CostInitialize. Return value 1.
MSI (s) (88:58) [16:37:37:282]: Doing action: FileCost
Action 16:37:37: FileCost. Computing space requirements
Action start 16:37:37: FileCost.
MSI (s) (88:58) [16:37:37:283]: Note: 1: 2205 2:  3: MsiAssembly
MSI (s) (88:58) [16:37:37:283]: Note: 1: 2205 2:  3: Class
MSI (s) (88:58) [16:37:37:283]: Note: 1: 2205 2:  3: Extension
MSI (s) (88:58) [16:37:37:283]: Note: 1: 2205 2:  3: TypeLib
Action ended 16:37:37: FileCost. Return value 1.
MSI (s) (88:58) [16:37:37:284]: Doing action: CostFinalize
Action 16:37:37: CostFinalize. Computing space requirements
Action start 16:37:37: CostFinalize.
MSI (s) (88:58) [16:37:37:285]: PROPERTY CHANGE: Adding OutOfDiskSpace property. Its value is '0'.
MSI (s) (88:58) [16:37:37:285]: PROPERTY CHANGE: Adding OutOfNoRbDiskSpace property. Its value is '0'.
MSI (s) (88:58) [16:37:37:285]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceAvailable property. Its value is '0'.
MSI (s) (88:58) [16:37:37:285]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRequired property. Its value is '0'.
MSI (s) (88:58) [16:37:37:285]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRemaining property. Its value is '0'.
MSI (s) (88:58) [16:37:37:285]: Note: 1: 2205 2:  3: Patch
MSI (s) (88:58) [16:37:37:285]: Note: 1: 2205 2:  3: Condition
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding ProgramTelerikDir property. Its value is 'C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding ProgramMenuDir property. Its value is 'C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding TelerikFolder property. Its value is 'C:\Program Files\Telerik\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding logs.Folder property. Its value is 'C:\Program Files\Telerik\TeamPulse\Logs\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding IntegrationService property. Its value is 'C:\Program Files\Telerik\TeamPulse\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding Release property. Its value is 'C:\Program Files\Telerik\TeamPulse\IntegrationService\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding MappingDefaults property. Its value is 'C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding UserManagementRoot property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding Views property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding Welcome property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding Activation property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding Shared property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding License property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding Home property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding EditorTemplates property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding Scripts property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding Images property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Images\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding Content property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\Content\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding bin property. Its value is 'C:\Program Files\Telerik\TeamPulse\UserManagement\bin\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding WebRoot property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding binFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\bin\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding ClientBinFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\'.
MSI (s) (88:58) [16:37:37:286]: PROPERTY CHANGE: Adding FeedsFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\'.
MSI (s) (88:58) [16:37:37:287]: PROPERTY CHANGE: Adding ServiceFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Services\'.
MSI (s) (88:58) [16:37:37:287]: PROPERTY CHANGE: Adding TempStorage.Folder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\'.
MSI (s) (88:58) [16:37:37:287]: PROPERTY CHANGE: Adding ImagesFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Images\'.
MSI (s) (88:58) [16:37:37:287]: PROPERTY CHANGE: Adding DownloadFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Download\'.
MSI (s) (88:58) [16:37:37:287]: PROPERTY CHANGE: Adding CommonFolder property. Its value is 'C:\Program Files\Telerik\TeamPulse\wwwroot\Common\'.
MSI (s) (88:58) [16:37:37:287]: Target path resolution complete. Dumping Directory table...
MSI (s) (88:58) [16:37:37:287]: Note: target paths subject to change (via custom actions or browsing)
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: TARGETDIR    , Object: C:\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: WindowsFolder    , Object: C:\Windows\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: ProgramMenuFolder    , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: ProgramTelerikDir    , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: ProgramMenuDir   , Object: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: ProgramFilesFolder   , Object: C:\Program Files\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: TelerikFolder    , Object: C:\Program Files\Telerik\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: INSTALLLOCATION  , Object: C:\Program Files\Telerik\TeamPulse\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: logs.Folder  , Object: C:\Program Files\Telerik\TeamPulse\Logs\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: IntegrationService   , Object: C:\Program Files\Telerik\TeamPulse\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: Release  , Object: C:\Program Files\Telerik\TeamPulse\IntegrationService\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: MappingDefaults  , Object: C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: UserManagementRoot   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: Views    , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: Welcome  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: Activation   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: Shared   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: License  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: Home , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: EditorTemplates  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: Scripts  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: Images   , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Images\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: Content  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\Content\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: bin  , Object: C:\Program Files\Telerik\TeamPulse\UserManagement\bin\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: WebRoot  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: binFolder    , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\bin\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: ClientBinFolder  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: FeedsFolder  , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: ServiceFolder    , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Services\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: TempStorage.Folder   , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: ImagesFolder , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Images\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: DownloadFolder   , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Download\
MSI (s) (88:58) [16:37:37:287]: Dir (target): Key: CommonFolder , Object: C:\Program Files\Telerik\TeamPulse\wwwroot\Common\
MSI (s) (88:58) [16:37:37:287]: Note: 1: 2205 2:  3: MsiAssembly
MSI (s) (88:58) [16:37:37:287]: Note: 1: 2228 2:  3: MsiAssembly 4:  SELECT `MsiAssembly`.`Attributes`, `MsiAssembly`.`File_Application`, `MsiAssembly`.`File_Manifest`,  `Component`.`KeyPath` FROM `MsiAssembly`, `Component` WHERE  `MsiAssembly`.`Component_` = `Component`.`Component` AND `MsiAssembly`.`Component_` = ?
Action ended 16:37:37: CostFinalize. Return value 1.
MSI (s) (88:58) [16:37:37:289]: Doing action: InstallValidate
Action 16:37:37: InstallValidate. Validating install
Action start 16:37:37: InstallValidate.
MSI (s) (88:58) [16:37:37:290]: PROPERTY CHANGE: Deleting MsiRestartManagerSessionKey property. Its current value is '600e5f91e22f934f8a6584cf2ba2b0b5'.
MSI (s) (88:58) [16:37:37:290]: Feature: ProductFeature; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: AppRootFiles1; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: AppRootFiles2; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: MySite_root_Files; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: CommonFiles; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: DownloadFiles; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: ImageFiles; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: ServiceFiles; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: TempStorage.Component; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: FeedServiceFiles; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: ClientBinFiles; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: binFiles; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: WebSite_Config; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: WebSiteIIS6Config; Installed: Absent;   Request: Local;   Action: Null
MSI (s) (88:58) [16:37:37:290]: Component: UserManagementRootFiles; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:290]: Component: UserManagementConfigIIS6; Installed: Absent;   Request: Local;   Action: Null
MSI (s) (88:58) [16:37:37:290]: Component: UserManagementConfigIIS7; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: UserManagementBin; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: UserManagemetnContent; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: UserManagementImages; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: UserManagementScripts; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: Web.config_1; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: UserManagemntHome; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: UserManagemntHomeEditorTemplates; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: UserManagementLicense; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: UsermanagementShared; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: UserManagementActivation; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: UserManagementWelcome; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: IntegrationServiceMain; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: TfsSyncMappingDefaults; Installed: Absent;   Request: Local;   Action: Null
MSI (s) (88:58) [16:37:37:291]: Component: logs.Component; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: TelerikMenuShortcuts; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: StartMenuShortcuts; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: __TelerikMenuShortcuts65; Installed: Null;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: __StartMenuShortcuts65; Installed: Null;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: __MySite_root_Files65; Installed: Null;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: __AppRootFiles165; Installed: Null;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Component: __AppRootFiles265; Installed: Null;   Request: Local;   Action: Local
MSI (s) (88:58) [16:37:37:291]: Note: 1: 2205 2:  3: BindImage
MSI (s) (88:58) [16:37:37:291]: Note: 1: 2205 2:  3: ProgId
MSI (s) (88:58) [16:37:37:291]: Note: 1: 2205 2:  3: PublishComponent
MSI (s) (88:58) [16:37:37:291]: Note: 1: 2205 2:  3: SelfReg
MSI (s) (88:58) [16:37:37:291]: Note: 1: 2205 2:  3: Extension
MSI (s) (88:58) [16:37:37:291]: Note: 1: 2205 2:  3: Font
MSI (s) (88:58) [16:37:37:291]: Note: 1: 2205 2:  3: Class
MSI (c) (84:B0) [16:37:37:291]: Note: 1: 2262 2: Billboard 3: -2147287038
MSI (s) (88:58) [16:37:37:292]: Note: 1: 2205 2:  3: _RemoveFilePath
MSI (s) (88:58) [16:37:37:315]: PROPERTY CHANGE: Modifying CostingComplete property. Its current value is '0'. Its new value: '1'.
MSI (s) (88:58) [16:37:37:315]: Note: 1: 2205 2:  3: BindImage
MSI (s) (88:58) [16:37:37:315]: Note: 1: 2205 2:  3: ProgId
MSI (s) (88:58) [16:37:37:315]: Note: 1: 2205 2:  3: PublishComponent
MSI (s) (88:58) [16:37:37:315]: Note: 1: 2205 2:  3: SelfReg
MSI (s) (88:58) [16:37:37:315]: Note: 1: 2205 2:  3: Extension
MSI (s) (88:58) [16:37:37:315]: Note: 1: 2205 2:  3: Font
MSI (s) (88:58) [16:37:37:315]: Note: 1: 2205 2:  3: Class
MSI (s) (88:58) [16:37:37:315]: Note: 1: 2727 2: 
MSI (s) (88:58) [16:37:37:319]: Note: 1: 2727 2: 
Action ended 16:37:37: InstallValidate. Return value 1.
MSI (s) (88:58) [16:37:37:320]: Doing action: RemoveExistingProducts
Action 16:37:37: RemoveExistingProducts. Removing applications
Action start 16:37:37: RemoveExistingProducts.
Action ended 16:37:37: RemoveExistingProducts. Return value 1.
MSI (s) (88:58) [16:37:37:323]: Doing action: InstallInitialize
Action 16:37:37: InstallInitialize.
Action start 16:37:37: InstallInitialize.
MSI (s) (88:58) [16:37:37:324]: Machine policy value 'AlwaysInstallElevated' is 0
MSI (s) (88:58) [16:37:37:324]: User policy value 'AlwaysInstallElevated' is 0
MSI (s) (88:58) [16:37:37:324]: BeginTransaction: Locking Server
MSI (s) (88:58) [16:37:37:325]: Note: 1: 1715 2: Telerik TeamPulse
MSI (s) (88:58) [16:37:37:325]: Calling SRSetRestorePoint API. dwRestorePtType: 0, dwEventType: 102, llSequenceNumber: 0, szDescription: "Installed Telerik TeamPulse".
MSI (s) (88:58) [16:37:37:325]: The call to SRSetRestorePoint API failed. Returned status: 0. GetLastError() returned: 127
MSI (s) (88:58) [16:37:37:325]: Server not locked: locking for product {02E84302-F860-462A-BF16-FE2D92A4A06A}
Action ended 16:37:37: InstallInitialize. Return value 1.
MSI (s) (88:58) [16:37:37:791]: Doing action: ProcessComponents
Action 16:37:37: ProcessComponents. Updating component registration
Action start 16:37:37: ProcessComponents.
MSI (s) (88:58) [16:37:37:793]: Note: 1: 2205 2:  3: MsiPatchCertificate
MSI (s) (88:58) [16:37:37:793]: LUA patching is disabled: missing MsiPatchCertificate table
MSI (s) (88:58) [16:37:37:793]: Resolving source.
MSI (s) (88:58) [16:37:37:793]: Resolving source to launched-from source.
MSI (s) (88:58) [16:37:37:793]: Setting launched-from source as last-used.
MSI (s) (88:58) [16:37:37:793]: PROPERTY CHANGE: Adding SourceDir property. Its value is 'C:\'.
MSI (s) (88:58) [16:37:37:793]: PROPERTY CHANGE: Adding SOURCEDIR property. Its value is 'C:\'.
MSI (s) (88:58) [16:37:37:793]: PROPERTY CHANGE: Adding SourcedirProduct property. Its value is '{02E84302-F860-462A-BF16-FE2D92A4A06A}'.
MSI (s) (88:58) [16:37:37:793]: SOURCEDIR ==> C:\
MSI (s) (88:58) [16:37:37:793]: SOURCEDIR product ==> {02E84302-F860-462A-BF16-FE2D92A4A06A}
MSI (s) (88:58) [16:37:37:793]: Determining source type
MSI (s) (88:58) [16:37:37:794]: Source type from package 'Telerik_TeamPulse_CommunityEdition_Q3_2010.msi': 2
MSI (s) (88:58) [16:37:37:794]: Source path resolution complete. Dumping Directory table...
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: TARGETDIR    , Object: C:\   , LongSubPath:  , ShortSubPath:
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: WindowsFolder    , Object: C:\   , LongSubPath:  , ShortSubPath:
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: ProgramMenuFolder    , Object: C:\   , LongSubPath:  , ShortSubPath:
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: ProgramTelerikDir    , Object: C:\   , LongSubPath: Telerik\ , ShortSubPath:
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: ProgramMenuDir   , Object: C:\   , LongSubPath: Telerik\TeamPulse\   , ShortSubPath: Telerik\sbxrd0kv\
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: ProgramFilesFolder   , Object: C:\   , LongSubPath:  , ShortSubPath:
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: TelerikFolder    , Object: C:\   , LongSubPath: Telerik\ , ShortSubPath:
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: INSTALLLOCATION  , Object: C:\   , LongSubPath: Telerik\TeamPulse\   , ShortSubPath: Telerik\lsx7_81t\
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: logs.Folder  , Object: C:\   , LongSubPath: Telerik\TeamPulse\Logs\  , ShortSubPath: Telerik\lsx7_81t\Logs\
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: IntegrationService   , Object: C:\   , LongSubPath: Telerik\TeamPulse\   , ShortSubPath: Telerik\lsx7_81t\
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: Release  , Object: C:\   , LongSubPath: Telerik\TeamPulse\IntegrationService\    , ShortSubPath: Telerik\lsx7_81t\5c8fgzot\
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: MappingDefaults  , Object: C:\   , LongSubPath: Telerik\TeamPulse\IntegrationService\MappingDefaults\    , ShortSubPath: Telerik\lsx7_81t\5c8fgzot\vt4o93le\
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: UserManagementRoot   , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\    , ShortSubPath: Telerik\lsx7_81t\snusbtlo\
MSI (s) (88:58) [16:37:37:794]: Dir (source): Key: Views    , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\  , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: Welcome  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\Welcome\  , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\Welcome\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: Activation   , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\Activation\   , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\rlik-iha\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: Shared   , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\Shared\   , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\Shared\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: License  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\License\  , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\License\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: Home , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\Home\ , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\Home\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: EditorTemplates  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\ , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Views\Home\ayne0dx-\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: Scripts  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Scripts\    , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Scripts\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: Images   , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Images\ , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Images\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: Content  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\Content\    , ShortSubPath: Telerik\lsx7_81t\snusbtlo\Content\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: bin  , Object: C:\   , LongSubPath: Telerik\TeamPulse\UserManagement\bin\    , ShortSubPath: Telerik\lsx7_81t\snusbtlo\bin\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: WebRoot  , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\   , ShortSubPath: Telerik\lsx7_81t\wwwroot\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: binFolder    , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\bin\   , ShortSubPath: Telerik\lsx7_81t\wwwroot\bin\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: ClientBinFolder  , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\ClientBin\ , ShortSubPath: Telerik\lsx7_81t\wwwroot\9jnayfvp\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: FeedsFolder  , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Feeds\ , ShortSubPath: Telerik\lsx7_81t\wwwroot\Feeds\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: ServiceFolder    , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Services\  , ShortSubPath: Telerik\lsx7_81t\wwwroot\Services\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: TempStorage.Folder   , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Services\TempStorage\  , ShortSubPath: Telerik\lsx7_81t\wwwroot\Services\_zr9-3y4\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: ImagesFolder , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Images\    , ShortSubPath: Telerik\lsx7_81t\wwwroot\Images\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: DownloadFolder   , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Download\  , ShortSubPath: Telerik\lsx7_81t\wwwroot\Download\
MSI (s) (88:58) [16:37:37:795]: Dir (source): Key: CommonFolder , Object: C:\   , LongSubPath: Telerik\TeamPulse\wwwroot\Common\    , ShortSubPath: Telerik\lsx7_81t\wwwroot\Common\
Action 16:37:37: GenerateScript. Generating script operations for action:
GenerateScript: Updating component registration
Action ended 16:37:37: ProcessComponents. Return value 1.
MSI (s) (88:58) [16:37:37:804]: Doing action: UnpublishFeatures
Action 16:37:37: UnpublishFeatures. Unpublishing Product Features
Action start 16:37:37: UnpublishFeatures.
Action ended 16:37:37: UnpublishFeatures. Return value 1.
MSI (s) (88:58) [16:37:37:806]: Doing action: SchedSecureObjectsRollback
Action 16:37:37: SchedSecureObjectsRollback.
Action start 16:37:37: SchedSecureObjectsRollback.
MSI (s) (88:54) [16:37:37:811]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIBD88.tmp, Entrypoint: SchedSecureObjectsRollback
MSI (s) (88:B0) [16:37:37:811]: Generating random cookie.
MSI (s) (88:B0) [16:37:37:822]: Created Custom Action Server with PID 3416 (0xD58).
MSI (s) (88:18) [16:37:37:852]: Running as a service.
MSI (s) (88:18) [16:37:37:854]: Hello, I'm your 32bit Impersonated custom action server.
SchedSecureObjectsRollback:  Failed to store ACL rollback information with error 0x80070003 - continuing
SchedSecureObjectsRollback:  Failed to store ACL rollback information with error 0x80070003 - continuing
SchedSecureObjectsRollback:  Failed to store ACL rollback information with error 0x80070424 - continuing
Action ended 16:37:37: SchedSecureObjectsRollback. Return value 1.
MSI (s) (88:58) [16:37:37:866]: Doing action: ConfigureTeamPulseWebSites.SetProperty
Action 16:37:37: ConfigureTeamPulseWebSites.SetProperty.
Action start 16:37:37: ConfigureTeamPulseWebSites.SetProperty.
MSI (s) (88:58) [16:37:37:868]: PROPERTY CHANGE: Adding ConfigureTeamPulseWebSites property. Its value is 'SystemFolder=C:\Windows\system32\;INSTALLDIR=C:\Program Files\Telerik\TeamPulse\;NETFRAMEWORK40=C:\Windows\Microsoft.NET\Framework\v4.0.30319\'.
Action ended 16:37:37: ConfigureTeamPulseWebSites.SetProperty. Return value 1.
MSI (s) (88:58) [16:37:37:868]: Doing action: CleanupExistingApplicationPool.SetProperty
Action 16:37:37: CleanupExistingApplicationPool.SetProperty.
Action start 16:37:37: CleanupExistingApplicationPool.SetProperty.
MSI (s) (88:58) [16:37:37:870]: PROPERTY CHANGE: Adding CleanupExistingApplicationPool property. Its value is 'SystemFolder=C:\Windows\system32\'.
Action ended 16:37:37: CleanupExistingApplicationPool.SetProperty. Return value 1.
MSI (s) (88:58) [16:37:37:870]: Doing action: CleanupExistingTeampulseSite.SetProperty
Action 16:37:37: CleanupExistingTeampulseSite.SetProperty.
Action start 16:37:37: CleanupExistingTeampulseSite.SetProperty.
MSI (s) (88:58) [16:37:37:872]: PROPERTY CHANGE: Adding CleanupExistingTeampulseSite property. Its value is 'SystemFolder=C:\Windows\system32\'.
Action ended 16:37:37: CleanupExistingTeampulseSite.SetProperty. Return value 1.
MSI (s) (88:58) [16:37:37:872]: Doing action: CleanupExistingUserManagementSite.SetProperty
Action 16:37:37: CleanupExistingUserManagementSite.SetProperty.
Action start 16:37:37: CleanupExistingUserManagementSite.SetProperty.
MSI (s) (88:58) [16:37:37:874]: PROPERTY CHANGE: Adding CleanupExistingUserManagementSite property. Its value is 'SystemFolder=C:\Windows\system32\'.
Action ended 16:37:37: CleanupExistingUserManagementSite.SetProperty. Return value 1.
MSI (s) (88:58) [16:37:37:874]: Doing action: FixupIIS.SetProperty
Action 16:37:37: FixupIIS.SetProperty.
Action start 16:37:37: FixupIIS.SetProperty.
MSI (s) (88:58) [16:37:37:876]: PROPERTY CHANGE: Adding FixupIIS property. Its value is 'SystemFolder=C:\Windows\system32\;INSTALLDIR=C:\Program Files\Telerik\TeamPulse\;NETFRAMEWORK40=C:\Windows\Microsoft.NET\Framework\v4.0.30319\'.
Action ended 16:37:37: FixupIIS.SetProperty. Return value 1.
MSI (s) (88:58) [16:37:37:876]: Doing action: CreateApplicationPool.SetProperty
Action 16:37:37: CreateApplicationPool.SetProperty.
Action start 16:37:37: CreateApplicationPool.SetProperty.
MSI (s) (88:58) [16:37:37:878]: PROPERTY CHANGE: Adding CreateApplicationPool property. Its value is '**********'.
Action ended 16:37:37: CreateApplicationPool.SetProperty. Return value 1.
MSI (s) (88:58) [16:37:37:878]: Doing action: RegisterNamespaces.SetProperty
Action 16:37:37: RegisterNamespaces.SetProperty.
Action start 16:37:37: RegisterNamespaces.SetProperty.
MSI (s) (88:58) [16:37:37:880]: PROPERTY CHANGE: Adding RegisterNamespaces property. Its value is 'DB_DOMAIN=BUMBLEBEE;DB_USERNAME=Administrator;NETSH=C:\Windows\system32\Netsh.exe'.
Action ended 16:37:37: RegisterNamespaces.SetProperty. Return value 1.
MSI (s) (88:58) [16:37:37:880]: Doing action: UnregisterNamespaces.SetProperty
Action 16:37:37: UnregisterNamespaces.SetProperty.
Action start 16:37:37: UnregisterNamespaces.SetProperty.
MSI (s) (88:58) [16:37:37:882]: PROPERTY CHANGE: Adding UnregisterNamespaces property. Its value is 'NETSH=C:\Windows\system32\Netsh.exe'.
Action ended 16:37:37: UnregisterNamespaces.SetProperty. Return value 1.
MSI (s) (88:58) [16:37:37:882]: Doing action: CleanupExistingTeampulseSite
Action 16:37:37: CleanupExistingTeampulseSite.
Action start 16:37:37: CleanupExistingTeampulseSite.
CleanupExistingTeampulseSite:
Action ended 16:37:37: CleanupExistingTeampulseSite. Return value 1.
MSI (s) (88:58) [16:37:37:891]: Doing action: CleanupExistingUserManagementSite
Action 16:37:37: CleanupExistingUserManagementSite.
Action start 16:37:37: CleanupExistingUserManagementSite.
CleanupExistingUserManagementSite:
Action ended 16:37:37: CleanupExistingUserManagementSite. Return value 1.
MSI (s) (88:58) [16:37:37:900]: Doing action: CleanupExistingApplicationPool
Action 16:37:37: CleanupExistingApplicationPool.
Action start 16:37:37: CleanupExistingApplicationPool.
CleanupExistingApplicationPool:
Action ended 16:37:37: CleanupExistingApplicationPool. Return value 1.
MSI (s) (88:58) [16:37:37:909]: Doing action: FixupIIS
Action 16:37:37: FixupIIS.
Action start 16:37:37: FixupIIS.
FixupIIS:
Action ended 16:37:37: FixupIIS. Return value 1.
MSI (s) (88:58) [16:37:37:918]: Doing action: StopServices
Action 16:37:37: StopServices. Stopping services
Action start 16:37:37: StopServices.
StopServices: Service: Stopping services
Action ended 16:37:37: StopServices. Return value 1.
MSI (s) (88:58) [16:37:37:921]: Doing action: DeleteServices
Action 16:37:37: DeleteServices. Deleting services
Action start 16:37:37: DeleteServices.
DeleteServices: Service: Deleting services
Action ended 16:37:37: DeleteServices. Return value 1.
MSI (s) (88:58) [16:37:37:923]: Doing action: RemoveRegistryValues
Action 16:37:37: RemoveRegistryValues. Removing system registry values
Action start 16:37:37: RemoveRegistryValues.
Action ended 16:37:37: RemoveRegistryValues. Return value 1.
MSI (s) (88:58) [16:37:37:925]: Doing action: RemoveShortcuts
Action 16:37:37: RemoveShortcuts. Removing shortcuts
Action start 16:37:37: RemoveShortcuts.
Action ended 16:37:37: RemoveShortcuts. Return value 1.
MSI (s) (88:58) [16:37:37:927]: Doing action: UnregisterNamespaces
Action 16:37:37: UnregisterNamespaces.
Action start 16:37:37: UnregisterNamespaces.
UnregisterNamespaces:
Action ended 16:37:37: UnregisterNamespaces. Return value 1.
MSI (s) (88:58) [16:37:37:936]: Doing action: RemoveFiles
Action 16:37:37: RemoveFiles. Removing files
Action start 16:37:37: RemoveFiles.
Action ended 16:37:37: RemoveFiles. Return value 1.
MSI (s) (88:58) [16:37:37:938]: Doing action: RemoveFolders
Action 16:37:37: RemoveFolders. Removing folders
Action start 16:37:37: RemoveFolders.
Action ended 16:37:37: RemoveFolders. Return value 1.
MSI (s) (88:58) [16:37:37:940]: Doing action: CreateFolders
Action 16:37:37: CreateFolders. Creating folders
Action start 16:37:37: CreateFolders.
CreateFolders: Folder: Creating folders
Action ended 16:37:37: CreateFolders. Return value 1.
MSI (s) (88:58) [16:37:37:942]: Doing action: ConfigureUsers
Action 16:37:37: ConfigureUsers.
Action start 16:37:37: ConfigureUsers.
MSI (s) (88:5C) [16:37:37:948]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIBE05.tmp, Entrypoint: ConfigureUsers
MSI (s) (88!60) [16:37:38:237]: PROPERTY CHANGE: Modifying CreateUser property. Its current value is '**********'. Its new value: '**********'.
MSI (s) (88!60) [16:37:38:238]: Doing action: CreateUser
Action 16:37:38: CreateUser.
Action start 16:37:38: CreateUser.
CreateUser:
Action ended 16:37:38: CreateUser. Return value 1.
Action ended 16:37:38: ConfigureUsers. Return value 1.
MSI (s) (88:58) [16:37:38:243]: Doing action: InstallFiles
Action 16:37:38: InstallFiles. Copying new files
Action start 16:37:38: InstallFiles.
InstallFiles: File: Copying new files,  Directory: ,  Size:
MSI (s) (88:58) [16:37:38:251]: Note: 1: 2205 2:  3: Patch
MSI (s) (88:58) [16:37:38:251]: Note: 1: 2228 2:  3: Patch 4: SELECT `Patch`.`File_`, `Patch`.`Header`, `Patch`.`Attributes`, `Patch`.`Sequence`, `Patch`.`StreamRef_` FROM `Patch` WHERE `Patch`.`File_` = ? AND `Patch`.`#_MsiActive`=? ORDER BY `Patch`.`Sequence`
MSI (s) (88:58) [16:37:38:251]: Note: 1: 2205 2:  3: MsiSFCBypass
MSI (s) (88:58) [16:37:38:251]: Note: 1: 2228 2:  3: MsiSFCBypass 4: SELECT `File_` FROM `MsiSFCBypass` WHERE `File_` = ?
MSI (s) (88:58) [16:37:38:251]: Note: 1: 2205 2:  3: MsiPatchHeaders
MSI (s) (88:58) [16:37:38:251]: Note: 1: 2228 2:  3: MsiPatchHeaders 4: SELECT `Header` FROM `MsiPatchHeaders` WHERE `StreamRef` = ?
MSI (s) (88:58) [16:37:38:252]: Note: 1: 2205 2:  3: PatchPackage
MSI (s) (88:58) [16:37:38:252]: Note: 1: 2205 2:  3: MsiPatchHeaders
MSI (s) (88:58) [16:37:38:252]: Note: 1: 2205 2:  3: PatchPackage
Action ended 16:37:38: InstallFiles. Return value 1.
MSI (s) (88:58) [16:37:38:290]: Doing action: DuplicateFiles
Action 16:37:38: DuplicateFiles. Creating duplicate files
Action start 16:37:38: DuplicateFiles.
Action ended 16:37:38: DuplicateFiles. Return value 1.
MSI (s) (88:58) [16:37:38:292]: Doing action: SchedXmlFile
Action 16:37:38: SchedXmlFile.
Action start 16:37:38: SchedXmlFile.
MSI (s) (88:64) [16:37:38:297]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIBF6D.tmp, Entrypoint: SchedXmlFile
MSI (s) (88!68) [16:37:38:341]: PROPERTY CHANGE: Adding ExecXmlFile property. Its value is '1€1€C:\Program Files\Telerik\TeamPulse\wwwroot\Web.Config€3€0€/configuration/connectionStrings/add[@name='TeamPulse.Core.Properties.Settings.TeamPulseConnectionString']/@connectionString€€server=BUMBLEBEE;Integrated Security=true;DATABASE=TeamPulse€3€0€/configuration/appSettings/add[@key='CompanyLicenseName']/@value€€TeamPulse€3€0€/configuration/appSettings/add[@key='MachineID']/@value€€o2BV4oz2NF2wnV8hSX4wFBeOq8M5js6TKM1+I4sM1lE=€3€0€/configuration/appSettings/add[@key='UserManagementURL']/@value€€http://BUMBLEBEE:9897/€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Services.AuthorizationService']/endpoint/@bindingConfiguration€€windowsHttp€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Feeds.ChartFeed']/endpoint/@bindingConfiguration€€windowsRss€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Feeds.NewsFeed']/endpoint/@bindingConfiguration€€windowsRss€3€0€/configuration/system.se
MSI (s) (88!68) [16:37:38:342]: Doing action: ExecXmlFile
Action 16:37:38: ExecXmlFile.
Action start 16:37:38: ExecXmlFile.
ExecXmlFile:
Action ended 16:37:38: ExecXmlFile. Return value 1.
Action ended 16:37:38: SchedXmlFile. Return value 1.
MSI (s) (88:58) [16:37:38:347]: Doing action: CreateShortcuts
Action 16:37:38: CreateShortcuts. Creating shortcuts
Action start 16:37:38: CreateShortcuts.
CreateShortcuts: Shortcut: Creating shortcuts
Action ended 16:37:38: CreateShortcuts. Return value 1.
MSI (s) (88:58) [16:37:38:351]: Doing action: WriteRegistryValues
Action 16:37:38: WriteRegistryValues. Writing system registry values
Action start 16:37:38: WriteRegistryValues.
WriteRegistryValues: Key: Writing system registry values, Name: , Value:
Action ended 16:37:38: WriteRegistryValues. Return value 1.
MSI (s) (88:58) [16:37:38:354]: Doing action: InstallODBC
Action 16:37:38: InstallODBC. Installing ODBC components
Action start 16:37:38: InstallODBC.
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2711 2: ODBCDriverManager
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2711 2: ODBCDriverManager64
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2205 2:  3: ODBCDriver
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2228 2:  3: ODBCDriver 4: SELECT `Driver`,`ComponentId`,`Description`,`RuntimeFlags`,`Directory_`,`FileName`,`File_Setup`,`Action` FROM `ODBCDriver`, `File`, `Component` WHERE `File_` = `File` AND `ODBCDriver`.`Component_` = `Component` AND (`Component`.`ActionRequest` = 1 OR `Component`.`ActionRequest` = 2) AND `BinaryType` = ?
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2205 2:  3: ODBCDriver
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2228 2:  3: ODBCDriver 4: SELECT `Driver`,`ComponentId`,`Description`,`RuntimeFlags`,`Directory_`,`FileName`,`File_Setup`,`Action` FROM `ODBCDriver`, `File`, `Component` WHERE `File_` = `File` AND `ODBCDriver`.`Component_` = `Component` AND (`Component`.`ActionRequest` = 1 OR `Component`.`ActionRequest` = 2) AND `BinaryType` = ?
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2205 2:  3: ODBCTranslator
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2228 2:  3: ODBCTranslator 4: SELECT `Translator`,`Component`.`ComponentId`,`Description`,`RuntimeFlags`,`Directory_`,`FileName`,`File_Setup`,`Action` FROM `ODBCTranslator`, `File`, `Component` WHERE `File_` = `File` AND `ODBCTranslator`.`Component_` = `Component` AND (`Component`.`ActionRequest` = 1 OR `Component`.`ActionRequest` = 2) AND `BinaryType` = ?
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2205 2:  3: ODBCTranslator
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2228 2:  3: ODBCTranslator 4: SELECT `Translator`,`Component`.`ComponentId`,`Description`,`RuntimeFlags`,`Directory_`,`FileName`,`File_Setup`,`Action` FROM `ODBCTranslator`, `File`, `Component` WHERE `File_` = `File` AND `ODBCTranslator`.`Component_` = `Component` AND (`Component`.`ActionRequest` = 1 OR `Component`.`ActionRequest` = 2) AND `BinaryType` = ?
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2205 2:  3: ODBCDataSource
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2228 2:  3: ODBCDataSource 4: SELECT `DataSource`,`ComponentId`,`DriverDescription`,`Description`,`Registration` FROM `ODBCDataSource`, `Component` WHERE `Component_` = `Component` AND (`Component`.`Action` = 1 OR `Component`.`Action` = 2) AND `BinaryType` = ?
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2205 2:  3: ODBCDataSource
MSI (s) (88:58) [16:37:38:356]: Note: 1: 2228 2:  3: ODBCDataSource 4: SELECT `DataSource`,`ComponentId`,`DriverDescription`,`Description`,`Registration` FROM `ODBCDataSource`, `Component` WHERE `Component_` = `Component` AND (`Component`.`Action` = 1 OR `Component`.`Action` = 2) AND `BinaryType` = ?
Action ended 16:37:38: InstallODBC. Return value 0.
MSI (s) (88:58) [16:37:38:357]: Doing action: RunSQLScripts
Action 16:37:38: RunSQLScripts.
Action start 16:37:38: RunSQLScripts.
MSI (s) (88:6C) [16:37:38:367]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIBFAD.tmp, Entrypoint: RunSQLScripts
SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSIBFAD.tmp-\
SFXCA: Binding to CLR version v2.0.50727
Calling custom action DatabaseExtensions!DatabaseExtensions.CustomActions.RunSQLScripts
Determining if database already exists with connection string <server=BUMBLEBEE;Integrated Security=true;DATABASE=master>, username <Administrator>, domain <BUMBLEBEE>
Determining database version with connection string <server=BUMBLEBEE;Integrated Security=true;DATABASE=master>, username <Administrator>, domain <BUMBLEBEE>
Found existing database, version '2010.2.727.0'
Beginning installation transaction...
Executing sql script BEGIN TRANSACTION TeamPulseInstallTrans on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Running database script: 2010.2.916.0 - DatabaseExtensions.TeamPulse_2010_Q2_SP1_UpdateSchema.sql - Updating Database schema
Action 16:37:39: . Updating Database schema (2010.2.916.0)
Executing sql content DatabaseExtensions.TeamPulse_2010_Q2_SP1_UpdateSchema.sql on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Executing sql script USE
GO
 
/****** Object:  Trigger     Script Date: 08/09/2010 12:00:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'.'))
EXEC dbo.sp_executesql @statement = N'
CREATE trigger . on . instead of delete
AS
BEGIN
 
SET NOCOUNT ON;
 
BEGIN TRAN DeleteProject
 
DECLARE @ProjectIDToDelete INT
DECLARE @LastModifiedBy varchar(128)
DECLARE @LastModifiedSystemID int
 
Select @ProjectIDToDelete = deleted.ProjectID,
       @LastModifiedBy = deleted.LastModifiedBy,
       @LastModifiedSystemID = deleted.LastModifiedSystemID
from deleted
 
-- Disable all triggers (except this one)
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''#AllTriggers'') AND type in (N''U''))
    DROP TABLE #AllTriggers
 
SELECT T.Name as TrigName, o.Name as TabName, s.Name as SchemaName
INTO   #AllTriggers
FROM   sys.triggers T
       JOIN sys.objects o ON T.parent_Id = o.object_ID
       JOIN sys.schemas s ON o.schema_Id = s.Schema_ID
WHERE T.Name <> ''DeleteProject''
        
DECLARE TrigCurs Cursor    
FOR SELECT TrigName, TabName, SchemaName FROM #AllTriggers
OPEN TrigCurs
 
DECLARE @TrigName varchar(250), @TabName varchar(250), @SchameName VarChar(250), @cmd varchar(1000)
FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd = ''disable trigger  on .;''
    EXEC (@cmd)
    FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
END
 
-- Deleting Project data...
delete from AttachmentFile where ProjectID = @ProjectIDToDelete
delete from Attachment where ProjectID = @ProjectIDToDelete
delete from TestCase where ProjectID = @ProjectIDToDelete
delete from Task where ProjectID = @ProjectIDToDelete
delete from Hyperlink where ProjectID = @ProjectIDToDelete
delete from StoryPersona where ProjectID = @ProjectIDToDelete
delete from StoryRelationship where ProjectID = @ProjectIDToDelete
delete from StoryRichDescription where ProjectID = @ProjectIDToDelete
delete from Story where ProjectID = @ProjectIDToDelete
delete from SynchronizationError where ProjectID = @ProjectIDToDelete
delete from Area where ProjectID = @ProjectIDToDelete
delete from Iteration where ProjectID = @ProjectIDToDelete
delete from Timeline where ProjectID = @ProjectIDToDelete
delete from Persona where ProjectID = @ProjectIDToDelete
delete from ProjectUser where ProjectID = @ProjectIDToDelete
delete from ProjectSync where ProjectID = @ProjectIDToDelete
delete from ProjectTag where ProjectID = @ProjectIDToDelete
 
-- Enabling all triggers...
DECLARE TrigCurs2 Cursor
FOR SELECT TrigName, TabName, SchemaName from #AllTriggers
OPEN TrigCurs2
DECLARE @TrigName2 varchar(250), @TabName2 varchar(250), @SchameName2 VarChar(250), @cmd2 varchar(1000)
FETCH Next from TrigCurs2 into @TrigName2 , @TabName2 , @SchameName2
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd2 = ''enable trigger  on .;''
    EXEC (@cmd2)
    FETCH Next FROM TrigCurs2 INTO @TrigName2 , @TabName2 , @SchameName2
END
 
DROP TABLE #AllTriggers
 
-- Do the final project deletion after re-enabling the triggers
-- so that we get an audit record of the project deletion
delete from project where projectid = @ProjectIDToDelete
 
 
COMMIT TRAN DeleteProject
 
 
END
'
GO
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering .C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\...';
 
 
GO
ALTER TABLE .C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  BIGINT DEFAULT ((1)) NOT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Area_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Area'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AreaID,ProjectID,Name,ParentID,Sequence,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AreaID,ProjectID,Name,ParentID,Sequence,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Area'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateArea ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Area'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.AreaID = t.AreaID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Attachment_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Attachment'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AttachmentID,ProjectID,ParentID,ParentTypeID,AttachmentName,Description,AttachmentSize,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AttachmentID,ProjectID,ParentID,ParentTypeID,AttachmentName,Description,AttachmentSize,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Attachment'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateAttachment ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Attachment'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.AttachmentID = t.AttachmentID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger AttachmentFile_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'AttachmentFile'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AttachmentFileID,AttachmentID,ProjectID,AttachmentFileData,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AttachmentFileID,AttachmentID,ProjectID,AttachmentFileData,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'AttachmentFile'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateAttachmentFile ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'AttachmentFile'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.AttachmentFileID = t.AttachmentFileID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Hyperlink_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Hyperlink'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select HyperlinkID,ProjectID,StoryID,DisplayText,URL,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select HyperlinkID,ProjectID,StoryID,DisplayText,URL,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Hyperlink'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateHyperlink ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Hyperlink'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.HyperlinkID = t.HyperlinkID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Iteration_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Iteration'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select IterationID,ProjectID,TimeLineID,CapacityMinimum,CapacityMaximum,EndDate,PredecessorID,ParentID,Level,StartDate,Name,SourceId,Sequence,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select IterationID,ProjectID,TimeLineID,CapacityMinimum,CapacityMaximum,EndDate,PredecessorID,ParentID,Level,StartDate,Name,SourceId,Sequence,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Iteration'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateIteration ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Iteration'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.IterationID = t.IterationID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger License_AuditTracking on C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\ for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'License'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select LicenseID,LicenseKey,ActivationKey,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select LicenseID,LicenseKey,ActivationKey,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'License'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateLicense ON C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\ AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'License'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\ t
        JOIN inserted i ON i.LicenseID = t.LicenseID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Persona_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Persona'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select PersonaID,ProjectID,FullName,RichDescription,Position,IconResourceName,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select PersonaID,ProjectID,FullName,RichDescription,Position,IconResourceName,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Persona'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdatePersona ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Persona'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.PersonaID = t.PersonaID
 
END
GO
PRINT N'Altering ....';
 
 
GO
ALTER trigger . on .
    instead of delete
AS
BEGIN
 
SET NOCOUNT ON;
 
BEGIN TRAN DeleteProject
 
DECLARE @ProjectIDToDelete INT
DECLARE @LastModifiedBy varchar(128)
DECLARE @LastModifiedSystemID int
 
Select @ProjectIDToDelete = deleted.ProjectID,
       @LastModifiedBy = deleted.LastModifiedBy,
       @LastModifiedSystemID = deleted.LastModifiedSystemID
from deleted
 
-- Disable all triggers (except this one)
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'#AllTriggers') AND type in (N'U'))
    DROP TABLE #AllTriggers
 
SELECT T.Name as TrigName, o.Name as TabName, s.Name as SchemaName
INTO   #AllTriggers
FROM   sys.triggers T
       JOIN sys.objects o ON T.parent_Id = o.object_ID
       JOIN sys.schemas s ON o.schema_Id = s.Schema_ID
WHERE T.Name <> 'DeleteProject'
        
DECLARE TrigCurs Cursor    
FOR SELECT TrigName, TabName, SchemaName FROM #AllTriggers
OPEN TrigCurs
 
DECLARE @TrigName varchar(250), @TabName varchar(250), @SchameName VarChar(250), @cmd varchar(1000)
FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd = 'disable trigger  on .;'
    EXEC (@cmd)
    FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
END
 
-- Deleting Project data...
delete from AttachmentFile where ProjectID = @ProjectIDToDelete
delete from Attachment where ProjectID = @ProjectIDToDelete
delete from TestCase where ProjectID = @ProjectIDToDelete
delete from Task where ProjectID = @ProjectIDToDelete
delete from Hyperlink where ProjectID = @ProjectIDToDelete
delete from StoryPersona where ProjectID = @ProjectIDToDelete
delete from StoryRelationship where ProjectID = @ProjectIDToDelete
delete from StoryRichDescription where ProjectID = @ProjectIDToDelete
delete from Story where ProjectID = @ProjectIDToDelete
delete from SynchronizationError where ProjectID = @ProjectIDToDelete
delete from Area where ProjectID = @ProjectIDToDelete
delete from Iteration where ProjectID = @ProjectIDToDelete
delete from Timeline where ProjectID = @ProjectIDToDelete
delete from Persona where ProjectID = @ProjectIDToDelete
delete from ProjectUser where ProjectID = @ProjectIDToDelete
delete from ProjectSync where ProjectID = @ProjectIDToDelete
delete from ProjectTag where ProjectID = @ProjectIDToDelete
 
-- Enabling all triggers...
DECLARE TrigCurs2 Cursor
FOR SELECT TrigName, TabName, SchemaName from #AllTriggers
OPEN TrigCurs2
DECLARE @TrigName2 varchar(250), @TabName2 varchar(250), @SchameName2 VarChar(250), @cmd2 varchar(1000)
FETCH Next from TrigCurs2 into @TrigName2 , @TabName2 , @SchameName2
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd2 = 'enable trigger  on .;'
    EXEC (@cmd2)
    FETCH Next FROM TrigCurs2 INTO @TrigName2 , @TabName2 , @SchameName2
END
 
DROP TABLE #AllTriggers
 
-- Do the final project deletion after re-enabling the triggers
-- so that we get an audit record of the project deletion
delete from project where projectid = @ProjectIDToDelete
 
 
COMMIT TRAN DeleteProject
 
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Project_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Project'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectID,Name,Description,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectID,Name,Description,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Project'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateProject ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Project'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.ProjectID = t.ProjectID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectTag_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectTag'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectTagID,TagID,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectTagID,TagID,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectTag'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateProjectTag ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'ProjectTag'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.ProjectTagID = t.ProjectTagID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectTemplate_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectTemplate'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectTemplateID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectTemplateID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectTemplate'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateProjectTemplate ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'ProjectTemplate'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.ProjectTemplateID = t.ProjectTemplateID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectUser_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectUser'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectUserID,ProjectID,UserID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectUserID,ProjectID,UserID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectUser'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateProjectUser ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'ProjectUser'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.ProjectUserID = t.ProjectUserID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger RelationshipType_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'RelationshipType'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select RelationshipTypeID,DisplayName,ForwardDisplayName,ReverseDisplayName,TemplateReferenceName,IsDirectional,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select RelationshipTypeID,DisplayName,ForwardDisplayName,ReverseDisplayName,TemplateReferenceName,IsDirectional,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'RelationshipType'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateRelationshipType ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'RelationshipType'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.RelationshipTypeID = t.RelationshipTypeID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Story_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Story'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryID,Name,ProjectID,Points,Status,Complexity,Maturity,Certainty,AreaID,PriorityID,IterationID,PriorityClassification,ValueClassification,AssignedTo,AssignedToUserID,Description,IsSyncable,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryID,Name,ProjectID,Points,Status,Complexity,Maturity,Certainty,AreaID,PriorityID,IterationID,PriorityClassification,ValueClassification,AssignedTo,AssignedToUserID,Description,IsSyncable,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Story'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateStory ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Story'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.StoryID = t.StoryID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryPersona_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryPersona'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryPersonaID,ProjectID,StoryID,PersonaID,Role,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryPersonaID,ProjectID,StoryID,PersonaID,Role,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryPersona'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateStoryPersona ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'StoryPersona'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.StoryPersonaID = t.StoryPersonaID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryRelationship_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryRelationship'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryRelationshipID,RelationshipTypeID,ProjectID,ForwardStoryID,ReverseStoryID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryRelationshipID,RelationshipTypeID,ProjectID,ForwardStoryID,ReverseStoryID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryRelationship'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateStoryRelationship ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'StoryRelationship'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.StoryRelationshipID = t.StoryRelationshipID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryRichDescription_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryRichDescription'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryRichDescriptionID,ProjectID,StoryID,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryRichDescriptionID,ProjectID,StoryID,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryRichDescription'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateStoryRichDescription ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'StoryRichDescription'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.StoryRichDescriptionID = t.StoryRichDescriptionID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Tag_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Tag'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TagID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TagID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Tag'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateTag ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Tag'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.TagID = t.TagID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Task_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Task'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TaskID,Name,ProjectID,StoryID,EstimateOptimistic,EstimateProbable,EstimatePessimistic,Status,AreaID,IterationID,AssignedTo,AssignedToUserID,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TaskID,Name,ProjectID,StoryID,EstimateOptimistic,EstimateProbable,EstimatePessimistic,Status,AreaID,IterationID,AssignedTo,AssignedToUserID,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Task'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateTask ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Task'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.TaskID = t.TaskID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger TestCase_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'TestCase'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TestCaseID,ProjectID,StoryID,TestCaseTitle,TestCaseText,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TestCaseID,ProjectID,StoryID,TestCaseTitle,TestCaseText,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'TestCase'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateTestCase ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'TestCase'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.TestCaseID = t.TestCaseID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Timeline_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Timeline'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TimelineID,ProjectStartDate,ProjectEndDate,CreateIterations,DefaultIterationLength,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TimelineID,ProjectStartDate,ProjectEndDate,CreateIterations,DefaultIterationLength,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Timeline'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateTimeline ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Timeline'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.TimelineID = t.TimelineID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER TRIGGER UpdateUser ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'User'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.UserID = t.UserID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger User_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'User'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select UserID,Domain,Username,FirstName,LastName,Email,IsEnabled,PictureContentType,DeletionDate,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select UserID,Domain,Username,FirstName,LastName,Email,IsEnabled,PictureContentType,DeletionDate,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'User'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
ALTER TRIGGER UpdateVersion ON dbo.Version AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    UPDATE  SET LastModifiedDateUtc = getdate() WHERE VersionID IN (SELECT VersionID FROM inserted)
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION SyncErrorCountSummary
(  
)
RETURNS TABLE
AS
RETURN
(
    select
        ProjectID,
        (select count(*) from SynchronizationError where ProjectID = s.ProjectID) as ErrorCount,
        (select SyncStatus from ProjectSync where ProjectID = s.ProjectID) as SyncStatus
    from Project as s
)
GO
PRINT N'Altering ....';
 
 
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER FUNCTION ProjectSummaries
(  
)
RETURNS TABLE
AS
RETURN
(
 Select ProjectID, Name, Description, CreatedDateUTC, LastModifiedDateUtc,
        CASE
         WHEN LEN(Tags) > 0 THEN LEFT(Tags, LEN(Tags) -1)
         ELSE ''
        END AS Tags,
        CASE
         WHEN LEN(AuthorizedUsers) > 0 THEN LEFT(AuthorizedUsers, LEN(AuthorizedUsers) -1)
         ELSE ''
        END AS AuthorizedUsers
        FROM (
            SELECT ProjectID, Name, Description, CreatedDateUTC, LastModifiedDateUtc
            ,(
            SELECT t.Name + ','
            FROM ProjectTag as pt inner join Tag as t on pt.TagID = t.TagID
            WHERE pt.ProjectID = p.ProjectID
            ORDER BY Name
            FOR XML PATH('')
            ) AS Tags,
            (
            SELECT u.Domain + '\' + u.Username + ','
            FROM ProjectUser pu INNER JOIN dbo. u ON pu.UserID = u.UserID
            WHERE pu.ProjectID = p.ProjectID
            ORDER BY u.Domain, u.Username
            FOR XML PATH('')
            ) AS AuthorizedUsers         
 
        FROM Project AS p) as TBL
)
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION StoryCountSummary
(  
)
RETURNS TABLE
AS
RETURN
(
    select
        ProjectID,
        IterationID,
        Status,
        (select count(*) from Story where ProjectID = s.ProjectID) as OverallCount,
        (select count(*) from Story where ProjectID = s.ProjectID AND IterationID = s.IterationID) as IterationCount,
        COUNT(Status) as StatusCount
    from Story as s
    group by projectid, iterationid, status
     
)
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION StringListToTable (@list ntext)
      RETURNS @tbl TABLE (listpos int IDENTITY(1, 1) NOT NULL,
                          value  varchar(4000) NOT NULL) AS
   BEGIN
      DECLARE @pos      int,
              @textpos  int,
              @chunklen smallint,
              @str      nvarchar(4000),
              @tmpstr   nvarchar(4000),
              @leftover nvarchar(4000)
 
      SET @textpos = 1
      SET @leftover = ''
      WHILE @textpos <= datalength(@list) / 2
      BEGIN
         SET @chunklen = 4000 - datalength(@leftover) / 2
         SET @tmpstr = ltrim(@leftover + substring(@list, @textpos,
                                 @chunklen))
         SET @textpos = @textpos + @chunklen
 
         SET @pos = charindex(',', @tmpstr)
         WHILE @pos > 0
         BEGIN
            SET @str = substring(@tmpstr, 1, @pos - 1)
            INSERT @tbl (value) VALUES(@str)
            SET @tmpstr = ltrim(substring(@tmpstr, @pos + 1,
                                 len(@tmpstr)))
            SET @pos = charindex(',', @tmpstr)
         END
 
         SET @leftover = @tmpstr
      END
 
      IF ltrim(rtrim(@leftover)) <> ''
         INSERT @tbl (value) VALUES(@leftover)
 
      RETURN
   END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION .
(
)
RETURNS TABLE
AS
RETURN
(
SELECT     ROW_NUMBER() OVER(Order By ProjectID ASC, AssignedToUserID ASC) as RowID,   
               ProjectID,
               AssignedToUserID,
               AssignedTo,
               IterationID,
               u.IsEnabled,
               u.DeletionDate,
               (SELECT     COUNT(*) AS Expr1
                 FROM          dbo.Story
                 WHERE      (Status NOT IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS TotalCount,
                  
               (SELECT     COUNT(*) AS Expr1
                 FROM          dbo.Story AS Story_3
                 WHERE      (Status IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS DoneCount,
                  
               (SELECT     SUM(Points) AS Expr1
                 FROM          dbo.Story AS Story_2
                 WHERE      (Status NOT IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS TotalPoints,
                  
               (SELECT     SUM(Points) AS Expr1
                 FROM          dbo.Story AS Story_1
                 WHERE      (Status IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS DonePoints
                  
    FROM dbo.Story AS s LEFT OUTER JOIN  u ON s.AssignedToUserID = u.UserID
    GROUP BY ProjectID, AssignedToUserID, IterationID, AssignedTo, u.IsEnabled, u.DeletionDate
 
)
GO
PRINT N'Altering ....';
 
 
GO
ALTER FUNCTION .
(
)
RETURNS TABLE AS RETURN
(
    SELECT
        StoryID,
         
        (SELECT count(*) FROM Task WHERE StoryID = s.StoryID
            AND (Status IN (SELECT value FROM StringListToTable(
                (SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) )))
        AS TasksCompletedCount,
 
        (SELECT count(*) FROM Task WHERE StoryID = s.StoryID
            AND (Status NOT IN (SELECT value FROM StringListToTable(
                (SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) )) )
        AS TasksIncludedCount
 
    FROM Story as s
)
GO
PRINT N'Refreshing ....';
 
 
GO
EXECUTE sp_refreshview N'dbo.IterationCapacity';
 
 
GO
PRINT N'Refreshing ....';
 
 
GO
EXECUTE sp_refreshview N'dbo.RelatedStory';
 
 
GO
 on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Result: Success
Running database script: 2010.2.916.0 - DatabaseExtensions.TeamPulse_2010_Q2_SP1_UpdateRefData.sql - Updating Reference Data
Action 16:37:39: . Updating Reference Data (2010.2.916.0)
Executing sql content DatabaseExtensions.TeamPulse_2010_Q2_SP1_UpdateRefData.sql on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Executing sql script USE TeamPulse
 
-- This should always be last
UPDATE . SET  = N'2010.2.916.0',  = 'INSTALLER',  = GETDATE(),  = 0 WHERE VersionID = 1
 on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Result: Success
Running database script: 2010.2.929.0 - DatabaseExtensions.TeamPulse_2010_Q2_SP1_R2_UpdateRefData.sql - Updating Reference Data
Action 16:37:39: . Updating Reference Data (2010.2.929.0)
Executing sql content DatabaseExtensions.TeamPulse_2010_Q2_SP1_R2_UpdateRefData.sql on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Executing sql script USE TeamPulse
 
-- This should always be last
UPDATE . SET  = N'2010.2.929.0',  = 'INSTALLER',  = GETDATE(),  = 0 WHERE VersionID = 1
 on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Result: Success
Running database script: 2010.3.917.0 - DatabaseExtensions.TeamPulse_2010_Q3_Alpha_PrepExistingData.sql - Preparing Existing Data
Action 16:37:39: . Preparing Existing Data (2010.3.917.0)
Executing sql content DatabaseExtensions.TeamPulse_2010_Q3_Alpha_PrepExistingData.sql on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Executing sql script USE
 
-- Remove any existing rows from ProjectSync and SyncrhonizationError tables as they are invalidated as of Q3 release
 
DELETE FROM ProjectSync
DELETE FROM SynchronizationError on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Result: Success
Running database script: 2010.3.917.0 - DatabaseExtensions.TeamPulse_2010_Q3_Alpha_UpdateSchema.sql - Updating Database Schema
Action 16:37:39: . Updating Database Schema (2010.3.917.0)
Executing sql content DatabaseExtensions.TeamPulse_2010_Q3_Alpha_UpdateSchema.sql on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Executing sql script USE
 
GO
PRINT N'Dropping FK_ProjectSync_Project...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE .
    ADD  INT CONSTRAINT  DEFAULT ((0)) NOT NULL;
 
 
GO
PRINT N'Starting rebuilding table ....';
 
 
GO
/*
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
*/
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
SET XACT_ABORT ON;
 
BEGIN TRANSACTION;
 
CREATE TABLE . (
                 INT           IDENTITY (1, 1) NOT NULL,
                     INT           NOT NULL,
       INT           NOT NULL,
                      XML           NOT NULL,
                    INT           NOT NULL,
     DATETIME      NULL,
                     VARCHAR (128) NOT NULL,
                DATETIME      NOT NULL,
               INT           NOT NULL,
                VARCHAR (128) NOT NULL,
           DATETIME      NOT NULL,
          INT           NOT NULL,
                 BIGINT        CONSTRAINT  DEFAULT ((1)) NOT NULL
);
 
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
IF EXISTS (SELECT TOP 1 1
           FROM   .)
    BEGIN
        SET IDENTITY_INSERT . ON;
        INSERT INTO . (, , )
        SELECT   ,
                 ,
                  
        FROM     .
        ORDER BY  ASC;
        SET IDENTITY_INSERT . OFF;
    END
 
DROP TABLE .;
 
EXECUTE sp_rename N'.', N'ProjectSync';
 
EXECUTE sp_rename N'.', N'PK_ProjectSync', N'OBJECT';
 
COMMIT TRANSACTION;
 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE . DROP COLUMN ;
 
 
GO
PRINT N'Starting rebuilding table ....';
 
 
GO
/*
The column .. is being dropped, data loss could occur.
 
The column .. is being dropped, data loss could occur.
 
The column .. is being dropped, data loss could occur.
 
The column .. is being dropped, data loss could occur.
 
The column .. is being dropped, data loss could occur.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
 
The type for column ErrorType in table . is currently  VARCHAR (25) NOT NULL but is being changed to  INT NOT NULL. Data loss could occur.
*/
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
SET XACT_ABORT ON;
 
BEGIN TRANSACTION;
 
CREATE TABLE . (
      INT           IDENTITY (1, 1) NOT NULL,
     INT           NOT NULL,
                   INT           NOT NULL,
                   INT           NOT NULL,
                DATETIME      NOT NULL,
                     VARCHAR (500) NULL,
                   VARCHAR (128) NOT NULL,
              DATETIME      NOT NULL,
             INT           NOT NULL,
              VARCHAR (128) NOT NULL,
         DATETIME      NOT NULL,
        INT           NOT NULL,
               BIGINT        NOT NULL
);
 
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
IF EXISTS (SELECT TOP 1 1
           FROM   .)
    BEGIN
        SET IDENTITY_INSERT . ON;
        INSERT INTO . (, , )
        SELECT   ,
                 ,
                  
        FROM     .
        ORDER BY  ASC;
        SET IDENTITY_INSERT . OFF;
    END
 
DROP TABLE .;
 
EXECUTE sp_rename N'.', N'SynchronizationError';
 
EXECUTE sp_rename N'.', N'PK_SynchronizationError', N'OBJECT';
 
COMMIT TRANSACTION;
 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE TABLE . (
         INT            IDENTITY (1, 1) NOT NULL,
     INT            NOT NULL,
               VARCHAR (1000) NOT NULL
);
 
 
GO
PRINT N'Creating PK_AppliedSyncAction...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE TABLE . (
       INT           IDENTITY (1, 1) NOT NULL,
           DATETIME      NOT NULL,
             DATETIME      NOT NULL,
                 INT           NOT NULL,
                     INT           NOT NULL,
       INT           NOT NULL,
                      XML           NOT NULL,
                    INT           NOT NULL,
     DATETIME      NULL,
                     VARCHAR (128) NOT NULL,
                DATETIME      NOT NULL,
               INT           NOT NULL,
                VARCHAR (128) NOT NULL,
           DATETIME      NOT NULL,
          INT           NOT NULL
);
 
 
GO
PRINT N'Creating PK_HistoricalProjectSync...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE TABLE . (
               INT           NOT NULL,
                     VARCHAR (50)  NOT NULL,
              VARCHAR (250) NOT NULL,
            BIT           NOT NULL,
       BIT           NOT NULL,
          BIT           NOT NULL,
                VARCHAR (128) NOT NULL,
           DATETIME      NOT NULL,
          INT           NOT NULL,
           VARCHAR (128) NOT NULL,
      DATETIME      NOT NULL,
     INT           NOT NULL
);
 
 
GO
PRINT N'Creating PK_Provider...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE TABLE . (
       INT           IDENTITY (1, 1) NOT NULL,
         INT           NOT NULL,
                       INT           NOT NULL,
                    INT           NOT NULL,
                       VARCHAR (128) NOT NULL,
                     VARCHAR (MAX) NULL,
             DATETIME      NOT NULL,
                VARCHAR (128) NOT NULL,
     VARCHAR (128) NULL,
                VARCHAR (MAX) NULL,
        DATETIME      NOT NULL,
           VARCHAR (128) NOT NULL,
                  INT           NULL,
                       VARCHAR (128) NOT NULL,
                  DATETIME      NOT NULL,
                 INT           NOT NULL,
                  VARCHAR (128) NOT NULL,
             DATETIME      NOT NULL,
            INT           NOT NULL,
                   BIGINT        NOT NULL
);
 
 
GO
PRINT N'Creating PK_SynchronizationConflict...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE TABLE . (
     INT           IDENTITY (1, 1) NOT NULL,
                INT           NOT NULL,
                    XML           NOT NULL,
                   VARCHAR (128) NOT NULL,
              DATETIME      NOT NULL,
             INT           NOT NULL,
              VARCHAR (128) NOT NULL,
         DATETIME      NOT NULL,
        INT           NOT NULL,
               BIGINT        NOT NULL
);
 
 
GO
PRINT N'Creating PK_SynchronizationServer...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE TABLE . (
                 INT            IDENTITY (1, 1) NOT NULL,
                               INT            NOT NULL,
                                INT            NOT NULL,
                              VARCHAR (50)   NOT NULL,
                                  INT            NOT NULL,
                                VARCHAR (1000) NULL,
       DATETIME       NULL,
     DATETIME       NULL,
                               VARCHAR (128)  NOT NULL,
                          DATETIME       NOT NULL,
                         INT            NOT NULL,
                          VARCHAR (128)  NOT NULL,
                     DATETIME       NOT NULL,
                    INT            NOT NULL,
                           BIGINT         NOT NULL
);
 
 
GO
PRINT N'Creating PK_SynchronizationStatus...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
 
GO
PRINT N'Creating DF_SynchronizationStatus_VersionNumber...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  DEFAULT ((1)) FOR ;
 
 
GO
PRINT N'Creating FK_ProjectSync_Project...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE CASCADE ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_ProjectSync_SynchronizationServer...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_SynchronizationError_Project...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_SynchronizationError_SynchronizationStatus...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_AppliedSyncAction_SynchronizationStatus...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_SynchronizationConflict_Project...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_SynchronizationConflict_SynchronizationStatus...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_SynchronizationStatus_Project...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateProjectSync ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'ProjectSync'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.ProjectSyncID = t.ProjectSyncID
 
END
GO
PRINT N'Creating ....';
 
 
GO
 
create trigger ProjectSync_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectSync'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectSyncID,ProjectID,SynchronizationServerID,SyncStatus,LastSuccessfulSyncDateUtc,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectSyncID,ProjectID,SynchronizationServerID,SyncStatus,LastSuccessfulSyncDateUtc,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectSync'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateSynchronizationError ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'SynchronizationError'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.SynchronizationErrorID = t.SynchronizationErrorID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Area_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Area'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AreaID,ProjectID,Name,ParentID,Sequence,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AreaID,ProjectID,Name,ParentID,Sequence,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Area'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Attachment_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Attachment'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AttachmentID,ProjectID,ParentID,ParentTypeID,AttachmentName,Description,AttachmentSize,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AttachmentID,ProjectID,ParentID,ParentTypeID,AttachmentName,Description,AttachmentSize,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Attachment'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger AttachmentFile_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'AttachmentFile'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AttachmentFileID,AttachmentID,ProjectID,AttachmentFileData,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AttachmentFileID,AttachmentID,ProjectID,AttachmentFileData,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'AttachmentFile'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Hyperlink_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Hyperlink'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select HyperlinkID,ProjectID,StoryID,DisplayText,URL,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select HyperlinkID,ProjectID,StoryID,DisplayText,URL,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Hyperlink'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Iteration_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Iteration'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select IterationID,ProjectID,TimeLineID,CapacityMinimum,CapacityMaximum,EndDate,PredecessorID,ParentID,Level,StartDate,Name,SourceId,Sequence,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select IterationID,ProjectID,TimeLineID,CapacityMinimum,CapacityMaximum,EndDate,PredecessorID,ParentID,Level,StartDate,Name,SourceId,Sequence,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Iteration'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger License_AuditTracking on C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\ for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'License'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select LicenseID,LicenseKey,ActivationKey,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select LicenseID,LicenseKey,ActivationKey,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'License'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Persona_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Persona'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select PersonaID,ProjectID,FullName,RichDescription,Position,IconResourceName,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select PersonaID,ProjectID,FullName,RichDescription,Position,IconResourceName,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Persona'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
ALTER trigger . on .
    instead of delete
AS
BEGIN
 
SET NOCOUNT ON;
 
BEGIN TRAN DeleteProject
 
DECLARE @ProjectIDToDelete INT
DECLARE @LastModifiedBy varchar(128)
DECLARE @LastModifiedSystemID int
 
Select @ProjectIDToDelete = deleted.ProjectID,
       @LastModifiedBy = deleted.LastModifiedBy,
       @LastModifiedSystemID = deleted.LastModifiedSystemID
from deleted
 
-- Disable all triggers (except this one)
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'#AllTriggers') AND type in (N'U'))
    DROP TABLE #AllTriggers
 
SELECT T.Name as TrigName, o.Name as TabName, s.Name as SchemaName
INTO   #AllTriggers
FROM   sys.triggers T
       JOIN sys.objects o ON T.parent_Id = o.object_ID
       JOIN sys.schemas s ON o.schema_Id = s.Schema_ID
WHERE T.Name <> 'DeleteProject'
        
DECLARE TrigCurs Cursor    
FOR SELECT TrigName, TabName, SchemaName FROM #AllTriggers
OPEN TrigCurs
 
DECLARE @TrigName varchar(250), @TabName varchar(250), @SchameName VarChar(250), @cmd varchar(1000)
FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd = 'disable trigger  on .;'
    EXEC (@cmd)
    FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
END
 
-- Deleting Project data...
delete a from AppliedSyncAction a INNER JOIN SynchronizationStatus s on a.SynchronizationStatusID = s.SynchronizationStatusID where s.ProjectID = @ProjectIDToDelete
delete from SynchronizationError where ProjectID = @ProjectIDToDelete
delete from SynchronizationConflict where ProjectID = @ProjectIDToDelete
delete from SynchronizationStatus where ProjectID = @ProjectIDToDelete
delete from AttachmentFile where ProjectID = @ProjectIDToDelete
delete from Attachment where ProjectID = @ProjectIDToDelete
delete from TestCase where ProjectID = @ProjectIDToDelete
delete from Task where ProjectID = @ProjectIDToDelete
delete from Hyperlink where ProjectID = @ProjectIDToDelete
delete from StoryPersona where ProjectID = @ProjectIDToDelete
delete from StoryRelationship where ProjectID = @ProjectIDToDelete
delete from StoryRichDescription where ProjectID = @ProjectIDToDelete
delete from Story where ProjectID = @ProjectIDToDelete
delete from Area where ProjectID = @ProjectIDToDelete
delete from Iteration where ProjectID = @ProjectIDToDelete
delete from Timeline where ProjectID = @ProjectIDToDelete
delete from Persona where ProjectID = @ProjectIDToDelete
delete from ProjectUser where ProjectID = @ProjectIDToDelete
delete from ProjectSync where ProjectID = @ProjectIDToDelete
delete from ProjectTag where ProjectID = @ProjectIDToDelete
 
-- Enabling all triggers...
DECLARE TrigCurs2 Cursor
FOR SELECT TrigName, TabName, SchemaName from #AllTriggers
OPEN TrigCurs2
DECLARE @TrigName2 varchar(250), @TabName2 varchar(250), @SchameName2 VarChar(250), @cmd2 varchar(1000)
FETCH Next from TrigCurs2 into @TrigName2 , @TabName2 , @SchameName2
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd2 = 'enable trigger  on .;'
    EXEC (@cmd2)
    FETCH Next FROM TrigCurs2 INTO @TrigName2 , @TabName2 , @SchameName2
END
 
DROP TABLE #AllTriggers
 
-- Do the final project deletion after re-enabling the triggers
-- so that we get an audit record of the project deletion
delete from project where projectid = @ProjectIDToDelete
 
 
COMMIT TRAN DeleteProject
 
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Project_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Project'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectID,Name,Description,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectID,Name,Description,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Project'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectTag_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectTag'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectTagID,TagID,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectTagID,TagID,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectTag'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectTemplate_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectTemplate'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectTemplateID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectTemplateID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectTemplate'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectUser_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectUser'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectUserID,ProjectID,UserID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectUserID,ProjectID,UserID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectUser'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger RelationshipType_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'RelationshipType'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select RelationshipTypeID,DisplayName,ForwardDisplayName,ReverseDisplayName,TemplateReferenceName,IsDirectional,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select RelationshipTypeID,DisplayName,ForwardDisplayName,ReverseDisplayName,TemplateReferenceName,IsDirectional,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'RelationshipType'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Story_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Story'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryID,Name,ProjectID,Points,Status,Complexity,Maturity,Certainty,AreaID,PriorityID,IterationID,PriorityClassification,ValueClassification,AssignedTo,AssignedToUserID,Description,IsSyncable,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryID,Name,ProjectID,Points,Status,Complexity,Maturity,Certainty,AreaID,PriorityID,IterationID,PriorityClassification,ValueClassification,AssignedTo,AssignedToUserID,Description,IsSyncable,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Story'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryPersona_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryPersona'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryPersonaID,ProjectID,StoryID,PersonaID,Role,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryPersonaID,ProjectID,StoryID,PersonaID,Role,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryPersona'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryRelationship_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryRelationship'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryRelationshipID,RelationshipTypeID,ProjectID,ForwardStoryID,ReverseStoryID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryRelationshipID,RelationshipTypeID,ProjectID,ForwardStoryID,ReverseStoryID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryRelationship'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryRichDescription_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryRichDescription'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryRichDescriptionID,ProjectID,StoryID,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryRichDescriptionID,ProjectID,StoryID,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryRichDescription'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Tag_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Tag'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TagID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TagID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Tag'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Task_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Task'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TaskID,Name,ProjectID,StoryID,EstimateOptimistic,EstimateProbable,EstimatePessimistic,Status,AreaID,IterationID,AssignedTo,AssignedToUserID,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TaskID,Name,ProjectID,StoryID,EstimateOptimistic,EstimateProbable,EstimatePessimistic,Status,AreaID,IterationID,AssignedTo,AssignedToUserID,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Task'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger TestCase_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'TestCase'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TestCaseID,ProjectID,StoryID,TestCaseTitle,TestCaseText,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TestCaseID,ProjectID,StoryID,TestCaseTitle,TestCaseText,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'TestCase'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Timeline_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Timeline'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TimelineID,ProjectStartDate,ProjectEndDate,CreateIterations,DefaultIterationLength,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TimelineID,ProjectStartDate,ProjectEndDate,CreateIterations,DefaultIterationLength,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Timeline'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger User_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'User'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select UserID,Domain,Username,FirstName,LastName,Email,IsEnabled,PictureContentType,DeletionDate,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select UserID,Domain,Username,FirstName,LastName,Email,IsEnabled,PictureContentType,DeletionDate,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'User'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateSynchronizationConflict ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'SynchronizationConflict'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.SynchronizationConflictID = t.SynchronizationConflictID
 
END
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateSynchronizationServer ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'SynchronizationServer'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.SynchronizationServerID = t.SynchronizationServerID
 
END
GO
PRINT N'Creating ....';
 
 
GO
 
create trigger SynchronizationServer_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'SynchronizationServer'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select SynchronizationServerID,SystemTypeID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select SynchronizationServerID,SystemTypeID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'SynchronizationServer'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateSynchronizationStatus ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'SynchronizationStatus'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.SynchronizationStatusID = t.SynchronizationStatusID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
-- =============================================
-- Author:      Dave Harris
-- Create date: June 7 2010
-- Description: Modifies or Inserts records in HistoricalStory as required
-- =============================================
ALTER PROCEDURE .
    -- Add the parameters for the stored procedure here
    @newEndDateUtc datetime
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
 
    declare @lastUpdateUtc datetime
    select @lastUpdateUtc = COALESCE(MAX(HistoryEndDateUtc), '1753-01-01')
    from HistoricalStory
 
    update h1
    set HistoryEndDateUtc = @newEndDateUtc
    from HistoricalStory h1
    where h1.StoryID in (select s.StoryID
                      from Story s
                      where s.LastModifiedDateUtc <= @lastUpdateUtc)
      and h1.HistoricalStoryID = (select MAX(h2.HistoricalStoryID)
                               from HistoricalStory h2
                               where h2.StoryID = h1.StoryID)
 
    insert into HistoricalStory (
               ,,,,,,
               ,,,,,,
               ,,,,
               ,,,,,
               ,,,)
    select
               case when CreatedDateUtc > @lastUpdateUtc
                    then CreatedDateUtc
                    else @lastUpdateUtc
               end
               ,@newEndDateUtc,StoryID,Name,ProjectID,Points,
               ,Complexity,Maturity,Certainty,AreaID,PriorityID,IterationID
               ,PriorityClassification,ValueClassification,AssignedTo,AssignedToUserID
               ,,IsSyncable,CreatedBy,CreatedDateUtc,CreatedSystemID
               ,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID
          from Story
          where StoryID in (select StoryID
                            from Story
                            where LastModifiedDateUtc > @lastUpdateUtc)
           
END
GO
PRINT N'Creating ....';
 
 
GO
 
 
 
-- =============================================
-- Author:      Dave Harris
-- Create date: June 8 2010
-- Description: Modifies or Inserts records in HistoricalProjectSync as required
-- =============================================
CREATE PROCEDURE .
    -- Add the parameters for the stored procedure here
    @newEndDateUtc datetime
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
 
    declare @lastUpdateUtc datetime
    select @lastUpdateUtc = COALESCE(MAX(HistoryEndDateUtc), '1753-01-01')
    from HistoricalProjectSync
 
    update h1
    set h1.HistoryEndDateUtc = @newEndDateUtc
    from HistoricalProjectSync h1
    where h1.ProjectSyncID in (select p.ProjectSyncID
                      from ProjectSync p
                      where p.LastModifiedDateUtc <= @lastUpdateUtc)
      and h1.HistoricalProjectSyncID = (select MAX(h2.HistoricalProjectSyncID)
                               from HistoricalProjectSync h2
                               where h2.ProjectSyncID = h1.ProjectSyncID)
 
    insert into HistoricalProjectSync (,,
           ,,,,,
           ,,
           ,,,,)
    select
               case when CreatedDateUtc > @lastUpdateUtc
                    then CreatedDateUtc
                    else @lastUpdateUtc
               end
               ,@newEndDateUtc,ProjectSyncID,ProjectID,SynchronizationServerID
               ,Settings,SyncStatus,LastSuccessfulSyncDateUtc
               ,CreatedBy,CreatedDateUtc,CreatedSystemID
               ,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID
          from ProjectSync
          where ProjectSyncID in (select ProjectSyncID
                            from ProjectSync
                            where LastModifiedDateUtc > @lastUpdateUtc)
           
END
GO
PRINT N'Creating ....';
 
 
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE .
    -- Add the parameters for the stored procedure here
    @StoryID int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
     
    declare @results table
(
    ResultID int identity(1,1) NOT NULL,
    AuditID int NOT NULL,
    ChangeTypeID int NOT NULL,
    TableName varchar(128) NOT NULL,
    ProjectID int,
    PrimaryKeyField varchar(1000) NOT NULL,
    PrimaryKeyValue int NOT NULL,
    FieldName varchar(128),
    OldValue varchar(max),
    NewValue varchar(max),
    ModifiedBy varchar(128) NOT NULL,
    ModifiedDateUtc datetime NOT NULL
)
 
declare @storyPersonas table
(
    ID int identity(1,1) NOT NULL,
    StoryPersonaID int NOT NULL
)
 
declare @tasks table
(
    ID int identity(1,1) NOT NULL,
    TaskID int NOT NULL
)
 
declare @Relationships table
(
    ID int identity(1,1) NOT NULL,
    RelationshipID int NOT NULL
)
 
declare @Hyperlinks table
(
    ID int identity(1,1) NOT NULL,
    HyperlinkID int NOT NULL
)
 
declare @Attachment table
(
    ID int identity(1,1) NOT NULL,
    AttachmentID int NOT NULL
)
 
declare @TestCases table
(
    ID int identity(1,1) NOT NULL,
    TestCaseID int NOT NULL
)
 
--Add Story records
insert into @results (AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)
select AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc
from Audit
where TableName = 'Story'
and PrimaryKeyValue = @StoryID
and FieldName != 'VersionNumber'
 
--Add storyPersona records
insert into @storyPersonas (StoryPersonaID)
select DISTINCT(a.PrimaryKeyValue)
from Audit a
inner join @results r ON CAST(a.NewValue as int) = r.PrimaryKeyValue
where a.TableName = 'StoryPersona'
and a.FieldName = 'StoryID' AND a.NewValue = @StoryID
 
insert into @results (AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)
select AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc
from Audit
inner join @storyPersonas ON PrimaryKeyValue = StoryPersonaID
where TableName = 'StoryPersona'
 
--Add Task Records
insert into @tasks (TaskID)
select DISTINCT(a.PrimaryKeyValue)
from Audit a
inner join @results r ON CAST(a.NewValue as int) = r.PrimaryKeyValue
where a.TableName = 'Task'
and a.FieldName = 'StoryID' AND a.NewValue = @StoryID
 
insert into @results (AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)
select AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc
from Audit
inner join @Tasks ON PrimaryKeyValue = TaskID
where TableName = 'Task'
 
--Add Relationships Records
insert into @Relationships (RelationshipID)
select DISTINCT(a.PrimaryKeyValue)
from Audit a
inner join @results r ON CAST(a.NewValue as int) = r.PrimaryKeyValue
where a.TableName = 'StoryRelationship'
and (a.FieldName = 'ForwardStoryID' OR a.FieldName = 'ReverseStoryID')
AND a.NewValue = @StoryID
 
insert into @results (AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)
select AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc
from Audit
inner join @Relationships ON PrimaryKeyValue = RelationshipID
where TableName = 'StoryRelationship'
 
--Add Hyperlink Records
insert into @Hyperlinks(HyperlinkID)
select DISTINCT(a.PrimaryKeyValue)
from Audit a
inner join @results r ON CAST(a.NewValue as int) = r.PrimaryKeyValue
where a.TableName = 'Hyperlink'
and a.FieldName = 'StoryID' AND a.NewValue = @StoryID
 
insert into @results (AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)
select AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc
from Audit
inner join @Hyperlinks ON PrimaryKeyValue = HyperlinkID
where TableName = 'Hyperlink'
 
--Add Attachment Records
insert into @Attachment(AttachmentID)
select DISTINCT(a.PrimaryKeyValue)
from Audit a
inner join @results r ON CAST(a.NewValue as int) = r.PrimaryKeyValue
where a.TableName = 'Attachment'
and a.FieldName = 'ParentID' AND a.NewValue = @StoryID
 
insert into @results (AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)
select AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc
from Audit
inner join @Attachment ON PrimaryKeyValue = AttachmentID
where TableName = 'Attachment'
 
--Add Test Case Records
insert into @TestCases(TestCaseID)
select DISTINCT(a.PrimaryKeyValue)
from Audit a
inner join @results r ON CAST(a.NewValue as int) = r.PrimaryKeyValue
where a.TableName = 'TestCase'
and a.FieldName = 'StoryID' AND a.NewValue = @StoryID
 
insert into @results (AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc)
select AuditID, ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, ModifiedBy, ModifiedDateUtc
from Audit
inner join @TestCases ON PrimaryKeyValue = TestCaseID
where TableName = 'TestCase'
 
select * from @results
Order by ModifiedDateUtc DESC
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION SyncErrorCountSummary
(  
)
RETURNS TABLE
AS
RETURN
(
    select
        ProjectID,
        (select count(*) from SynchronizationStatus where ProjectID = s.ProjectID and Status = 3) as ErrorCount,
        (select SyncStatus from ProjectSync where ProjectID = s.ProjectID) as SyncStatus
    from Project as s
)
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION StoryCountSummary
(  
)
RETURNS TABLE
AS
RETURN
(
    select
        ProjectID,
        IterationID,
        Status,
        (select count(*) from Story where ProjectID = s.ProjectID) as OverallCount,
        (select count(*) from Story where ProjectID = s.ProjectID AND IterationID = s.IterationID) as IterationCount,
        COUNT(Status) as StatusCount
    from Story as s
    group by projectid, iterationid, status
     
)
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION .
(
)
RETURNS TABLE
AS
RETURN
(
SELECT     ROW_NUMBER() OVER(Order By ProjectID ASC, AssignedToUserID ASC) as RowID,   
               ProjectID,
               AssignedToUserID,
               AssignedTo,
               IterationID,
               u.IsEnabled,
               u.DeletionDate,
               (SELECT     COUNT(*) AS Expr1
                 FROM          dbo.Story
                 WHERE      (Status NOT IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS TotalCount,
                  
               (SELECT     COUNT(*) AS Expr1
                 FROM          dbo.Story AS Story_3
                 WHERE      (Status IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS DoneCount,
                  
               (SELECT     SUM(Points) AS Expr1
                 FROM          dbo.Story AS Story_2
                 WHERE      (Status NOT IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS TotalPoints,
                  
               (SELECT     SUM(Points) AS Expr1
                 FROM          dbo.Story AS Story_1
                 WHERE      (Status IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS DonePoints
                  
    FROM dbo.Story AS s LEFT OUTER JOIN  u ON s.AssignedToUserID = u.UserID
    GROUP BY ProjectID, AssignedToUserID, IterationID, AssignedTo, u.IsEnabled, u.DeletionDate
 
)
GO
PRINT N'Altering ....';
 
 
GO
ALTER FUNCTION .
(
)
RETURNS TABLE AS RETURN
(
    SELECT
        StoryID,
         
        (SELECT count(*) FROM Task WHERE StoryID = s.StoryID
            AND (Status IN (SELECT value FROM StringListToTable(
                (SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) )))
        AS TasksCompletedCount,
 
        (SELECT count(*) FROM Task WHERE StoryID = s.StoryID
            AND (Status NOT IN (SELECT value FROM StringListToTable(
                (SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) )) )
        AS TasksIncludedCount
 
    FROM Story as s
)
GO
PRINT N'Altering ....';
 
 
GO
ALTER FUNCTION .
(
    @IterationID int
)
RETURNS @resultTable TABLE (  IDENTITY(1,1) NOT NULL,
                      NOT NULL,
                      NOT NULL,
                      NOT NULL,
                     (255) NOT NULL,
                      NOT NULL,
                      NULL,
                     (50) NOT NULL,
                     (255) NULL,
                     (255) NULL,
                     (255) NULL,
                      NOT NULL,
                      NULL,
                      NOT NULL,
                     (255) NULL,
                     (255) NULL,
                     (100) NULL,
                      NULL,
                     (max) NULL,
                      NOT NULL,
                     (128) NOT NULL,
                      NOT NULL,
                      NOT NULL,
                     (128) NOT NULL,
                      NOT NULL,
                      NOT NULL)
BEGIN
 
DECLARE @StartDate date,
        @EndDate date
 
SELECT @StartDate = CAST(StartDate as date), @EndDate = CAST(EndDate as date)
from Iteration
where IterationID = @IterationID
 
DECLARE @tempTable TABLE (  IDENTITY(1,1) NOT NULL,
                      NOT NULL,
                      NOT NULL,
                      NOT NULL,
                     (255) NOT NULL,
                      NOT NULL,
                      NULL,
                     (50) NOT NULL,
                     (255) NULL,
                     (255) NULL,
                     (255) NULL,
                      NOT NULL,
                      NULL,
                      NOT NULL,
                     (255) NULL,
                     (255) NULL,
                     (100) NULL,
                      NULL,
                     (max) NULL,
                      NOT NULL,
                     (128) NOT NULL,
                      NOT NULL,
                      NOT NULL,
                     (128) NOT NULL,
                      NOT NULL,
                      NOT NULL)
 
DECLARE @CurrentTime DATETIME
       ,@CurrentTimeUtc DATETIME
 
-- This is done to remove seconds/milliseconds from the mathematics, as they can cause problems with the calc
SELECT @CurrentTime = CAST(GETDATE() AS SMALLDATETIME), @CurrentTimeUtc = CAST(GETUTCDATE() AS SMALLDATETIME)
 
-- Determine the UTC value of our start and end dates
DECLARE @StartDateUtc DATETIME = @StartDate + @CurrentTimeUtc - @CurrentTime
DECLARE @EndDateUtc DATETIME = DATEADD(Day, 1, @EndDate + @CurrentTimeUtc - @CurrentTime)
 
-- create a table containing every day from start to end
DECLARE @Dates TABLE
(
      
)
 
DECLARE @WorkingDateUtc DATETIME = @StartDateUtc
WHILE (@WorkingDateUtc < @EndDateUtc)
BEGIN
    INSERT INTO @Dates VALUES (@WorkingDateUtc)
    SELECT @WorkingDateUtc = DATEADD(Day, 1, @WorkingDateUtc)
END
                     
-- join the dates to our historical records
insert into @tempTable (,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    )
select h.,
                    d. + @CurrentTime - @CurrentTimeUtc,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.,
                    h.
from  h
    inner join @Dates d ON h. < DATEADD(Day, 1, d.)
                        AND h. > d.
where h.IterationID = @IterationID
union
select (select COALESCE(MAX(HistoricalStoryID),0) from HistoricalStory) + 1,
                    CAST(@CurrentTime as date),
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.,
                    s.
from Story s                   
where s.IterationID = @IterationID
  and CAST(@CurrentTime as date) >= @StartDate
  and CAST(@CurrentTime as date) <= @EndDate
 
insert into @resultTable(,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    )
select ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                    ,
                     from @tempTable t
where t.HistoricalStoryID = (select MAX(HistoricalStoryID)
                             from @tempTable t2
                             where t.StoryID = t2.StoryID
                               and t.HistoricalDate = t2.)
RETURN
   
END
GO
PRINT N'Refreshing ....';
 
 
GO
EXECUTE sp_refreshview N'dbo.RelatedStory';
 
 
GO
PRINT N'Refreshing ....';
 
 
GO
EXECUTE sp_refreshview N'dbo.IterationCapacity';
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE VIEW dbo.StorySynchronizationStatusView
AS
SELECT     ss.SynchronizationStatusID, s.ProjectID, s.StoryID AS EntityID, 'Story' AS EntityType, ss.Status, ss.TargetID, ss.LastSuccessfulSyncToTargetDateUtc,
                      ss.LastSuccessfulSyncFromTargetDateUtc, ss.CreatedBy, ss.CreatedDateUtc, ss.CreatedSystemID, ss.LastModifiedBy, ss.LastModifiedDateUtc,
                      ss.LastModifiedSystemID
FROM         dbo.Story AS s LEFT OUTER JOIN
                      dbo.SynchronizationStatus AS ss ON s.StoryID = ss.EntityId AND ss.EntityType = 'Story'
GO
PRINT N'Checking existing data against newly created constraints';
 
 
GO
USE ;
 
 
GO
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
 
GO
 on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Result: Success
Running database script: 2010.3.917.0 - DatabaseExtensions.TeamPulse_2010_Q3_Alpha_UpdateRefData.sql - Updating Reference Data
Action 16:37:40: . Updating Reference Data (2010.3.917.0)
Executing sql content DatabaseExtensions.TeamPulse_2010_Q3_Alpha_UpdateRefData.sql on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Executing sql script USE
 
-- This should always be last
UPDATE . SET  = N'2010.3.917.0',  = 'INSTALLER',  = GETDATE(),  = 0 WHERE VersionID = 1
 
 
IF NOT EXISTS (SELECT * FROM )
BEGIN
 
INSERT INTO  (, , , , , , , , , , , ) VALUES (0, 'TeamPulse', 'TeamPulse', 1, 1, 1, 'Installer', GETUTCDATE(), 0, 'Installer', GETUTCDATE(), 0)
INSERT INTO  (, , , , , , , , , , , ) VALUES (1, 'TeamFoundationServer', 'Team Foundation Server', 1, 1, 1, 'Installer', GETUTCDATE(), 0, 'Installer', GETUTCDATE(), 0)
 
END on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Result: Success
Running database script: 2010.3.1013.0 - DatabaseExtensions.TeamPulse_2010_Q3_Beta_PrepExistingData.sql - Preparing Existing Data
Action 16:37:40: . Preparing Existing Data (2010.3.1013.0)
Executing sql content DatabaseExtensions.TeamPulse_2010_Q3_Beta_PrepExistingData.sql on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Executing sql script USE
 
-- Remove any existing rows from Attachments that weren't properly deleted from the DeleteStory trigger.
 
DELETE FROM Attachment WHERE ParentTypeID = 0 AND ParentID NOT IN (SELECT StoryID FROM Story)
 on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Result: Success
Running database script: 2010.3.1013.0 - DatabaseExtensions.TeamPulse_2010_Q3_Beta_UpdateSchema.sql - Updating Database Schema
Action 16:37:40: . Updating Database Schema (2010.3.1013.0)
Executing sql content DatabaseExtensions.TeamPulse_2010_Q3_Beta_UpdateSchema.sql on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Executing sql script USE
 
GO
PRINT N'Dropping ....';
 
 
GO
DROP TRIGGER .;
 
 
GO
PRINT N'Dropping DF__Audit__ModifiedD__09A971A2...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping DF_Audit_ModifiedSystemID...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping DF__Historica__Versi__31B762FC...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping DF_ProjectSync_VersionNumber...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping DF_Story_Points...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping DF_Story_IsSyncable...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping DF__Story__VersionNu__40F9A68C...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping DF_SynchronizationStatus_VersionNumber...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_Attachment_Project...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_ProjectSync_Project...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_ProjectSync_SynchronizationServer...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_Task_Story...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_StoryRichDescription_Story...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_StoryRelationship_ForwardStory...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_StoryRelationship_ReverseStory...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_StoryPersona_Story...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_Story_Area...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_Story_Iteration...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_Story_Project...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_Story_User...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_Hyperlink_Story...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_TestCase_Story...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_SynchronizationError_Project...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_SynchronizationError_SynchronizationStatus...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_AppliedSyncAction_SynchronizationStatus...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_SynchronizationConflict_SynchronizationStatus...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping FK_SynchronizationStatus_Project...';
 
 
GO
ALTER TABLE . DROP CONSTRAINT ;
 
 
GO
PRINT N'Dropping ....';
 
 
GO
DROP TABLE .;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE . ALTER COLUMN  INT NULL;
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER TABLE . ALTER COLUMN  INT NULL;
 
 
GO
PRINT N'Starting rebuilding table ....';
 
 
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
SET XACT_ABORT ON;
 
BEGIN TRANSACTION;
 
CREATE TABLE . (
              INT            IDENTITY (1, 1) NOT NULL,
         INT            NOT NULL,
            VARCHAR (128)  NOT NULL,
            INT            NULL,
      VARCHAR (1000) NOT NULL,
      INT            NOT NULL,
            VARCHAR (128)  NULL,
             VARCHAR (MAX)  NULL,
             VARCHAR (MAX)  NULL,
       INT            CONSTRAINT  DEFAULT ((0)) NOT NULL,
           VARCHAR (128)  NOT NULL,
      DATETIME       CONSTRAINT  DEFAULT (getdate()) NOT NULL,
     INT            CONSTRAINT  DEFAULT ((0)) NOT NULL
);
 
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
IF EXISTS (SELECT TOP 1 1
           FROM   .)
    BEGIN
        SET IDENTITY_INSERT . ON;
        INSERT INTO . (, , , , , , , , , , , )
        SELECT   ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                  
        FROM     .
        ORDER BY  ASC;
        SET IDENTITY_INSERT . OFF;
    END
 
DROP TABLE .;
 
EXECUTE sp_rename N'.', N'Audit';
 
EXECUTE sp_rename N'.', N'PK_Audit', N'OBJECT';
 
COMMIT TRANSACTION;
 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
 
GO
PRINT N'Starting rebuilding table ....';
 
 
GO
/*
The column .. is being dropped, data loss could occur.
*/
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
SET XACT_ABORT ON;
 
BEGIN TRANSACTION;
 
CREATE TABLE . (
          INT           IDENTITY (1, 1) NOT NULL,
        DATETIME      NOT NULL,
          DATETIME      NOT NULL,
                    INT           NOT NULL,
                       VARCHAR (255) NOT NULL,
                  INT           NOT NULL,
                     REAL          NULL,
                     VARCHAR (50)  NOT NULL,
                 VARCHAR (255) NULL,
                   VARCHAR (255) NULL,
                  VARCHAR (255) NULL,
                     INT           NOT NULL,
                 INT           NULL,
                INT           NOT NULL,
     VARCHAR (255) NULL,
        VARCHAR (255) NULL,
                 VARCHAR (100) NULL,
           INT           NULL,
                VARCHAR (MAX) NULL,
                 BIT           NOT NULL,
                     INT           NULL,
                  VARCHAR (128) NOT NULL,
             DATETIME      NOT NULL,
            INT           NOT NULL,
             VARCHAR (128) NOT NULL,
        DATETIME      NOT NULL,
       INT           NOT NULL,
              BIGINT        DEFAULT 1 NOT NULL
);
 
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
IF EXISTS (SELECT TOP 1 1
           FROM   .)
    BEGIN
        SET IDENTITY_INSERT . ON;
        INSERT INTO . (, , , , , , , , , , , , , , , , , , , , , , , , , , )
        SELECT   ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                  
        FROM     .
        ORDER BY  ASC;
        SET IDENTITY_INSERT . OFF;
    END
 
DROP TABLE .;
 
EXECUTE sp_rename N'.', N'HistoricalStory';
 
EXECUTE sp_rename N'.', N'PK_HistoricalStory', N'OBJECT';
 
COMMIT TRANSACTION;
 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
 
GO
PRINT N'Starting rebuilding table ....';
 
 
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
SET XACT_ABORT ON;
 
BEGIN TRANSACTION;
 
CREATE TABLE . (
                 INT            IDENTITY (1, 1) NOT NULL,
                     INT            NOT NULL,
       INT            NOT NULL,
                      XML            NOT NULL,
                    INT            NOT NULL,
                 NVARCHAR (500) NULL,
     DATETIME       NULL,
                     VARCHAR (128)  NOT NULL,
                DATETIME       NOT NULL,
               INT            NOT NULL,
                VARCHAR (128)  NOT NULL,
           DATETIME       NOT NULL,
          INT            NOT NULL,
                 BIGINT         CONSTRAINT  DEFAULT ((1)) NOT NULL
);
 
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
IF EXISTS (SELECT TOP 1 1
           FROM   .)
    BEGIN
        SET IDENTITY_INSERT . ON;
        INSERT INTO . (, , , , , , , , , , , , )
        SELECT   ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                  
        FROM     .
        ORDER BY  ASC;
        SET IDENTITY_INSERT . OFF;
    END
 
DROP TABLE .;
 
EXECUTE sp_rename N'.', N'ProjectSync';
 
EXECUTE sp_rename N'.', N'PK_ProjectSync', N'OBJECT';
 
COMMIT TRANSACTION;
 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
 
GO
PRINT N'Starting rebuilding table ....';
 
 
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
SET XACT_ABORT ON;
 
BEGIN TRANSACTION;
 
CREATE TABLE . (
                    INT           IDENTITY (1, 1) NOT NULL,
                       VARCHAR (255) NOT NULL,
                  INT           NOT NULL,
                     REAL          CONSTRAINT  DEFAULT ((0)) NULL,
                     VARCHAR (50)  NOT NULL,
                 VARCHAR (255) NULL,
                   VARCHAR (255) NULL,
                  VARCHAR (255) NULL,
                     INT           NOT NULL,
                 INT           NULL,
                INT           NOT NULL,
     VARCHAR (255) NULL,
        VARCHAR (255) NULL,
                 VARCHAR (100) NULL,
           INT           NULL,
                VARCHAR (MAX) NULL,
                 BIT           CONSTRAINT  DEFAULT ((0)) NOT NULL,
                     INT           NULL,
                  VARCHAR (128) NOT NULL,
             DATETIME      NOT NULL,
            INT           NOT NULL,
             VARCHAR (128) NOT NULL,
        DATETIME      NOT NULL,
       INT           NOT NULL,
              BIGINT        DEFAULT 1 NOT NULL
);
 
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
IF EXISTS (SELECT TOP 1 1
           FROM   .)
    BEGIN
        SET IDENTITY_INSERT . ON;
        INSERT INTO . (, , , , , , , , , , , , , , , , , , , , , , , )
        SELECT   ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                  
        FROM     .
        ORDER BY  ASC;
        SET IDENTITY_INSERT . OFF;
    END
 
DROP TABLE .;
 
EXECUTE sp_rename N'.', N'Story';
 
EXECUTE sp_rename N'.', N'PK_Story', N'OBJECT';
 
COMMIT TRANSACTION;
 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
 
GO
PRINT N'Creating .....';
 
 
GO
CREATE NONCLUSTERED INDEX
    ON .( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ONLINE = OFF, MAXDOP = 0);
 
 
GO
PRINT N'Starting rebuilding table ....';
 
 
GO
/*
The column .. on table . must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
*/
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
SET XACT_ABORT ON;
 
BEGIN TRANSACTION;
 
CREATE TABLE . (
      INT           IDENTITY (1, 1) NOT NULL,
     INT           NOT NULL,
                   INT           NOT NULL,
                   INT           NOT NULL,
                DATETIME      NOT NULL,
                     VARCHAR (500) NULL,
              XML           NOT NULL,
                   VARCHAR (128) NOT NULL,
              DATETIME      NOT NULL,
             INT           NOT NULL,
              VARCHAR (128) NOT NULL,
         DATETIME      NOT NULL,
        INT           NOT NULL,
               BIGINT        NOT NULL
);
 
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
IF EXISTS (SELECT TOP 1 1
           FROM   .)
    BEGIN
        SET IDENTITY_INSERT . ON;
        INSERT INTO . (, , , , , , , , , , , , )
        SELECT   ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                  
        FROM     .
        ORDER BY  ASC;
        SET IDENTITY_INSERT . OFF;
    END
 
DROP TABLE .;
 
EXECUTE sp_rename N'.', N'SynchronizationError';
 
EXECUTE sp_rename N'.', N'PK_SynchronizationError', N'OBJECT';
 
COMMIT TRANSACTION;
 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
 
GO
PRINT N'Starting rebuilding table ....';
 
 
GO
/*
The column .. is being dropped, data loss could occur.
 
The column .. is being dropped, data loss could occur.
*/
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
SET XACT_ABORT ON;
 
BEGIN TRANSACTION;
 
CREATE TABLE . (
       INT            IDENTITY (1, 1) NOT NULL,
                     INT            NOT NULL,
                      INT            NOT NULL,
                    VARCHAR (50)   NOT NULL,
                        INT            NOT NULL,
                      VARCHAR (1000) NULL,
     DATETIME       NULL,
                     VARCHAR (128)  NOT NULL,
                DATETIME       NOT NULL,
               INT            NOT NULL,
                VARCHAR (128)  NOT NULL,
           DATETIME       NOT NULL,
          INT            NOT NULL,
                 BIGINT         CONSTRAINT  DEFAULT ((1)) NOT NULL
);
 
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
IF EXISTS (SELECT TOP 1 1
           FROM   .)
    BEGIN
        SET IDENTITY_INSERT . ON;
        INSERT INTO . (, , , , , , , , , , , , )
        SELECT   ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                 ,
                  
        FROM     .
        ORDER BY  ASC;
        SET IDENTITY_INSERT . OFF;
    END
 
DROP TABLE .;
 
EXECUTE sp_rename N'.', N'SynchronizationStatus';
 
EXECUTE sp_rename N'.', N'PK_SynchronizationStatus', N'OBJECT';
 
COMMIT TRANSACTION;
 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE TABLE . (
         INT            IDENTITY (1, 1) NOT NULL,
      DATETIME       NOT NULL,
        DATETIME       NOT NULL,
                   INT            NOT NULL,
                     NVARCHAR (255) NOT NULL,
                INT            NULL,
                   NVARCHAR (255) NULL,
                     NVARCHAR (255) NULL,
                   NVARCHAR (255) NULL,
              NVARCHAR (MAX) NULL,
          NVARCHAR (MAX) NULL,
                VARCHAR (128)  NOT NULL,
           DATETIME       NOT NULL,
          INT            NOT NULL,
           VARCHAR (128)  NOT NULL,
      DATETIME       NOT NULL,
     INT            NOT NULL,
            BIGINT         NOT NULL
);
 
 
GO
PRINT N'Creating PK_HistoricalIdea...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE TABLE . (
     INT            IDENTITY (1, 1) NOT NULL,
         DATETIME       NOT NULL,
           DATETIME       NOT NULL,
               INT            NOT NULL,
                   INT            NULL,
                    INT            NOT NULL,
                INT            NOT NULL,
                 NVARCHAR (MAX) NULL,
             NVARCHAR (MAX) NULL,
                   VARCHAR (128)  NOT NULL,
              DATETIME       NOT NULL,
             INT            NOT NULL,
              VARCHAR (128)  NOT NULL,
         DATETIME       NOT NULL,
        INT            NOT NULL,
               BIGINT         NOT NULL
);
 
 
GO
PRINT N'Creating PK_HistoricalRichComment...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE TABLE . (
                   INT            IDENTITY (1, 1) NOT NULL,
                     NVARCHAR (255) NOT NULL,
                INT            NULL,
                   NVARCHAR (255) NULL,
                     NVARCHAR (255) NULL,
                   NVARCHAR (255) NULL,
              NVARCHAR (MAX) NULL,
          NVARCHAR (MAX) NULL,
                VARCHAR (128)  NOT NULL,
           DATETIME       NOT NULL,
          INT            NOT NULL,
           VARCHAR (128)  NOT NULL,
      DATETIME       NOT NULL,
     INT            NOT NULL,
            BIGINT         NOT NULL
);
 
 
GO
PRINT N'Creating PK_Idea...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE TABLE . (
             INT            IDENTITY (1, 1) NOT NULL,
     INT            NOT NULL,
                 VARCHAR (1000) NOT NULL,
              INT            NOT NULL,
                   VARCHAR (128)  NOT NULL,
              DATETIME       NOT NULL,
             INT            NOT NULL,
              VARCHAR (128)  NOT NULL,
         DATETIME       NOT NULL,
        INT            NOT NULL,
               BIGINT         NOT NULL
);
 
 
GO
PRINT N'Creating PK_KnownRevision...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE TABLE . (
            INT            IDENTITY (1, 1) NOT NULL,
                INT            NULL,
                 INT            NOT NULL,
             INT            NOT NULL,
              NVARCHAR (MAX) NULL,
          NVARCHAR (MAX) NULL,
                VARCHAR (128)  NOT NULL,
           DATETIME       NOT NULL,
          INT            NOT NULL,
           VARCHAR (128)  NOT NULL,
      DATETIME       NOT NULL,
     INT            NOT NULL,
            BIGINT         NOT NULL
);
 
 
GO
PRINT N'Creating PK_RichComment...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  PRIMARY KEY CLUSTERED ( ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
 
 
GO
PRINT N'Creating On column: VersionNumber...';
 
 
GO
ALTER TABLE .
    ADD DEFAULT ((1)) FOR ;
 
 
GO
PRINT N'Creating On column: VersionNumber...';
 
 
GO
ALTER TABLE .
    ADD DEFAULT ((1)) FOR ;
 
 
GO
PRINT N'Creating On column: VersionNumber...';
 
 
GO
ALTER TABLE .
    ADD DEFAULT ((1)) FOR ;
 
 
GO
PRINT N'Creating DF_KnownRevision_VersionNumber...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  DEFAULT ((1)) FOR ;
 
 
GO
PRINT N'Creating DF_KnownRevision_RevisionStatus...';
 
 
GO
ALTER TABLE .
    ADD CONSTRAINT  DEFAULT ((0)) FOR ;
 
 
GO
PRINT N'Creating On column: VersionNumber...';
 
 
GO
ALTER TABLE .
    ADD DEFAULT ((1)) FOR ;
 
 
GO
PRINT N'Creating FK_Attachment_Project...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_ProjectSync_Project...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE CASCADE ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_ProjectSync_SynchronizationServer...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_Task_Story...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_StoryRichDescription_Story...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE CASCADE ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_StoryRelationship_ForwardStory...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_StoryRelationship_ReverseStory...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_StoryPersona_Story...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE CASCADE ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_Story_Area...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_Story_Iteration...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_Story_Project...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_Story_User...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_Hyperlink_Story...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE CASCADE ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_TestCase_Story...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_SynchronizationError_Project...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_SynchronizationError_SynchronizationStatus...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_SynchronizationConflict_SynchronizationStatus...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_SynchronizationStatus_Project...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_Idea_Project...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_KnownRevision_SynchronizationStatus...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating FK_RichComment_Project...';
 
 
GO
ALTER TABLE . WITH NOCHECK
    ADD CONSTRAINT  FOREIGN KEY () REFERENCES . () ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateProjectSync ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'ProjectSync'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.ProjectSyncID = t.ProjectSyncID
 
END
GO
PRINT N'Creating ....';
 
 
GO
 
create trigger ProjectSync_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectSync'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectSyncID,ProjectID,SynchronizationServerID,SyncStatus,StatusMessage,LastSuccessfulSyncDateUtc,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectSyncID,ProjectID,SynchronizationServerID,SyncStatus,StatusMessage,LastSuccessfulSyncDateUtc,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectSync'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Creating ....';
 
 
GO
CREATE trigger . on .
    instead of delete
as
begin
 
SET NOCOUNT ON;
 
-- Delete any referencing story relationships and richdescriptions
-- Delete any related Tasks
-- We couldn't do this using cascade deletes because we have 2 foreign keys to story
-- and sql server won't allow it
 
Declare @StoryID int
Declare @LastModifiedBy varchar(128)
Declare @LastModifiedSystemID int
 
Select @StoryID = deleted.StoryID
, @LastModifiedBy = deleted.LastModifiedBy
, @LastModifiedSystemID = deleted.LastModifiedSystemID
from deleted
 
update StoryPersona
set LastModifiedBy = @LastModifiedBy
   ,LastModifiedSystemId = @LastModifiedSystemID
where StoryID = @StoryID
delete from StoryPersona where StoryID = @StoryID
 
update StoryRelationship
set LastModifiedBy = @LastModifiedBy
   ,LastModifiedSystemId = @LastModifiedSystemID
where ForwardStoryID = @StoryID or ReverseStoryID = @StoryID
delete from StoryRelationship where ForwardStoryID = @StoryID or ReverseStoryID = @StoryID
 
update StoryRichDescription
set LastModifiedBy = @LastModifiedBy
   ,LastModifiedSystemId = @LastModifiedSystemID
where StoryID = @StoryID
delete from StoryRichDescription where StoryID = @StoryID
 
update Task
set LastModifiedBy = @LastModifiedBy
   ,LastModifiedSystemId = @LastModifiedSystemID
where StoryID = @StoryID
delete from Task where StoryID = @StoryID
 
update TestCase
set LastModifiedBy = @LastModifiedBy
   ,LastModifiedSystemId = @LastModifiedSystemID
where StoryID = @StoryID
delete from TestCase where StoryID = @StoryID
 
update Attachment
set LastModifiedBy = @LastModifiedBy
   ,LastModifiedSystemId = @LastModifiedSystemID
where ParentID = @StoryID and ParentTypeID = 0
delete from Attachment where ParentID = @StoryID and ParentTypeID = 0
 
delete from Story where StoryID = @StoryID
     
end
GO
PRINT N'Creating ....';
 
 
GO
 
create trigger Story_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Story'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryID,Name,ProjectID,Points,Status,Complexity,Maturity,Certainty,AreaID,PriorityID,IterationID,PriorityClassification,ValueClassification,AssignedTo,AssignedToUserID,Description,IsSyncable,IdeaID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryID,Name,ProjectID,Points,Status,Complexity,Maturity,Certainty,AreaID,PriorityID,IterationID,PriorityClassification,ValueClassification,AssignedTo,AssignedToUserID,Description,IsSyncable,IdeaID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Story'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateStory ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Story'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.StoryID = t.StoryID
 
END
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateSynchronizationError ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'SynchronizationError'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.SynchronizationErrorID = t.SynchronizationErrorID
 
END
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateSynchronizationStatus ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'SynchronizationStatus'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.SynchronizationStatusID = t.SynchronizationStatusID
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Area_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Area'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AreaID,ProjectID,Name,ParentID,Sequence,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AreaID,ProjectID,Name,ParentID,Sequence,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Area'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Attachment_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Attachment'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AttachmentID,ProjectID,ParentID,ParentTypeID,AttachmentName,Description,AttachmentSize,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AttachmentID,ProjectID,ParentID,ParentTypeID,AttachmentName,Description,AttachmentSize,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Attachment'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger AttachmentFile_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'AttachmentFile'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select AttachmentFileID,AttachmentID,ProjectID,AttachmentFileData,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select AttachmentFileID,AttachmentID,ProjectID,AttachmentFileData,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'AttachmentFile'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Hyperlink_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Hyperlink'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select HyperlinkID,ProjectID,StoryID,DisplayText,URL,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select HyperlinkID,ProjectID,StoryID,DisplayText,URL,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Hyperlink'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Iteration_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Iteration'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select IterationID,ProjectID,TimeLineID,CapacityMinimum,CapacityMaximum,EndDate,PredecessorID,ParentID,Level,StartDate,Name,SourceId,Sequence,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select IterationID,ProjectID,TimeLineID,CapacityMinimum,CapacityMaximum,EndDate,PredecessorID,ParentID,Level,StartDate,Name,SourceId,Sequence,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Iteration'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger License_AuditTracking on C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\ for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'License'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select LicenseID,LicenseKey,ActivationKey,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select LicenseID,LicenseKey,ActivationKey,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'License'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Persona_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Persona'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select PersonaID,ProjectID,FullName,RichDescription,Position,IconResourceName,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select PersonaID,ProjectID,FullName,RichDescription,Position,IconResourceName,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Persona'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
ALTER trigger . on .
    instead of delete
AS
BEGIN
 
SET NOCOUNT ON;
 
BEGIN TRAN DeleteProject
 
DECLARE @ProjectIDToDelete INT
DECLARE @LastModifiedBy varchar(128)
DECLARE @LastModifiedSystemID int
 
Select @ProjectIDToDelete = deleted.ProjectID,
       @LastModifiedBy = deleted.LastModifiedBy,
       @LastModifiedSystemID = deleted.LastModifiedSystemID
from deleted
 
-- Disable all triggers (except this one)
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'#AllTriggers') AND type in (N'U'))
    DROP TABLE #AllTriggers
 
SELECT T.Name as TrigName, o.Name as TabName, s.Name as SchemaName
INTO   #AllTriggers
FROM   sys.triggers T
       JOIN sys.objects o ON T.parent_Id = o.object_ID
       JOIN sys.schemas s ON o.schema_Id = s.Schema_ID
WHERE T.Name <> 'DeleteProject'
        
DECLARE TrigCurs Cursor    
FOR SELECT TrigName, TabName, SchemaName FROM #AllTriggers
OPEN TrigCurs
 
DECLARE @TrigName varchar(250), @TabName varchar(250), @SchameName VarChar(250), @cmd varchar(1000)
FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd = 'disable trigger  on .;'
    EXEC (@cmd)
    FETCH Next FROM TrigCurs INTO @TrigName , @TabName , @SchameName
END
 
-- Deleting Project data...
delete kr from KnownRevision kr INNER JOIN SynchronizationStatus s on kr.SynchronizationStatusID = s.SynchronizationStatusID where s.ProjectID = @ProjectIDToDelete
delete from SynchronizationError where ProjectID = @ProjectIDToDelete
delete from SynchronizationConflict where ProjectID = @ProjectIDToDelete
delete from SynchronizationStatus where ProjectID = @ProjectIDToDelete
delete from AttachmentFile where ProjectID = @ProjectIDToDelete
delete from Attachment where ProjectID = @ProjectIDToDelete
delete from TestCase where ProjectID = @ProjectIDToDelete
delete from Task where ProjectID = @ProjectIDToDelete
delete from Hyperlink where ProjectID = @ProjectIDToDelete
delete from StoryPersona where ProjectID = @ProjectIDToDelete
delete from StoryRelationship where ProjectID = @ProjectIDToDelete
delete from StoryRichDescription where ProjectID = @ProjectIDToDelete
delete from Story where ProjectID = @ProjectIDToDelete
delete from Area where ProjectID = @ProjectIDToDelete
delete from Iteration where ProjectID = @ProjectIDToDelete
delete from Timeline where ProjectID = @ProjectIDToDelete
delete from Persona where ProjectID = @ProjectIDToDelete
delete from ProjectUser where ProjectID = @ProjectIDToDelete
delete from ProjectSync where ProjectID = @ProjectIDToDelete
delete from ProjectTag where ProjectID = @ProjectIDToDelete
delete from Idea where ProjectID = @ProjectIDToDelete
 
-- Enabling all triggers...
DECLARE TrigCurs2 Cursor
FOR SELECT TrigName, TabName, SchemaName from #AllTriggers
OPEN TrigCurs2
DECLARE @TrigName2 varchar(250), @TabName2 varchar(250), @SchameName2 VarChar(250), @cmd2 varchar(1000)
FETCH Next from TrigCurs2 into @TrigName2 , @TabName2 , @SchameName2
 
WHILE @@Fetch_Status = 0
BEGIN
    SET @cmd2 = 'enable trigger  on .;'
    EXEC (@cmd2)
    FETCH Next FROM TrigCurs2 INTO @TrigName2 , @TabName2 , @SchameName2
END
 
DROP TABLE #AllTriggers
 
-- Do the final project deletion after re-enabling the triggers
-- so that we get an audit record of the project deletion
delete from project where projectid = @ProjectIDToDelete
 
 
COMMIT TRAN DeleteProject
 
 
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Project_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Project'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectID,Name,Description,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectID,Name,Description,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Project'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectTag_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectTag'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectTagID,TagID,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectTagID,TagID,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectTag'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectTemplate_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectTemplate'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectTemplateID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectTemplateID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectTemplate'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger ProjectUser_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'ProjectUser'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select ProjectUserID,ProjectID,UserID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select ProjectUserID,ProjectID,UserID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'ProjectUser'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger RelationshipType_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'RelationshipType'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select RelationshipTypeID,DisplayName,ForwardDisplayName,ReverseDisplayName,TemplateReferenceName,IsDirectional,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select RelationshipTypeID,DisplayName,ForwardDisplayName,ReverseDisplayName,TemplateReferenceName,IsDirectional,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'RelationshipType'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryPersona_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryPersona'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryPersonaID,ProjectID,StoryID,PersonaID,Role,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryPersonaID,ProjectID,StoryID,PersonaID,Role,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryPersona'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryRelationship_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryRelationship'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryRelationshipID,RelationshipTypeID,ProjectID,ForwardStoryID,ReverseStoryID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryRelationshipID,RelationshipTypeID,ProjectID,ForwardStoryID,ReverseStoryID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryRelationship'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger StoryRichDescription_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'StoryRichDescription'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select StoryRichDescriptionID,ProjectID,StoryID,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select StoryRichDescriptionID,ProjectID,StoryID,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'StoryRichDescription'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger SynchronizationServer_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'SynchronizationServer'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select SynchronizationServerID,SystemTypeID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select SynchronizationServerID,SystemTypeID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'SynchronizationServer'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Tag_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Tag'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TagID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TagID,Name,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Tag'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Task_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Task'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TaskID,Name,ProjectID,StoryID,EstimateOptimistic,EstimateProbable,EstimatePessimistic,Status,AreaID,IterationID,AssignedTo,AssignedToUserID,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TaskID,Name,ProjectID,StoryID,EstimateOptimistic,EstimateProbable,EstimatePessimistic,Status,AreaID,IterationID,AssignedTo,AssignedToUserID,SourceID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Task'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger TestCase_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'TestCase'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TestCaseID,ProjectID,StoryID,TestCaseTitle,TestCaseText,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TestCaseID,ProjectID,StoryID,TestCaseTitle,TestCaseText,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'TestCase'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger Timeline_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Timeline'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select TimelineID,ProjectStartDate,ProjectEndDate,CreateIterations,DefaultIterationLength,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select TimelineID,ProjectStartDate,ProjectEndDate,CreateIterations,DefaultIterationLength,ProjectID,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Timeline'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER trigger User_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'User'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select UserID,Domain,Username,FirstName,LastName,Email,IsEnabled,PictureContentType,DeletionDate,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select UserID,Domain,Username,FirstName,LastName,Email,IsEnabled,PictureContentType,DeletionDate,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'User'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Creating ....';
 
 
GO
 
create trigger Idea_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'Idea'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select IdeaID,Name,ProjectID,Source,Size,Status,Description,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select IdeaID,Name,ProjectID,Source,Size,Status,Description,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'Idea'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Creating ....';
 
 
GO
CREATE trigger . on .
    instead of delete
as
begin
 
SET NOCOUNT ON;
 
-- Delete any referenced rich comments
 
Declare @IdeaID int
Declare @LastModifiedBy varchar(128)
Declare @LastModifiedSystemID int
 
Select @IdeaID = deleted.IdeaID
, @LastModifiedBy = deleted.LastModifiedBy
, @LastModifiedSystemID = deleted.LastModifiedSystemID
from deleted
 
update RichComment
set LastModifiedBy = @LastModifiedBy
   ,LastModifiedSystemId = @LastModifiedSystemID
where ParentID = @IdeaID and ParentTypeID = 1
delete from RichComment where ParentID = @IdeaID and ParentTypeID = 0
 
delete from Idea where IdeaID = @IdeaID
     
end
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateIdea ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'Idea'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.IdeaID = t.IdeaID
 
END
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateKnownRevision ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'KnownRevision'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.KnownRevisionID = t.KnownRevisionID
 
END
GO
PRINT N'Creating ....';
 
 
GO
 
create trigger KnownRevision_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'KnownRevision'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select KnownRevisionID,SynchronizationStatusID,RevisionKey,RevisionStatus,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select KnownRevisionID,SynchronizationStatusID,RevisionKey,RevisionStatus,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'KnownRevision'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Creating ....';
 
 
GO
 
CREATE TRIGGER UpdateRichComment ON  AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
 
    declare @bit int ,
    @field int ,
    @maxfield int ,
    @char int ,
    @fieldname varchar(100) ,
    @TableName varchar(128) ,
    @causesTimeStampUpdate bit,
    @sequence bigint
 
    select @TableName = 'RichComment'
    select @causesTimeStampUpdate = 0
 
    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
    while @field < @maxfield
    begin
        select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
        select @bit = (@field - 1 )% 8 + 1
        select @bit = power(2,@bit - 1)
        select @char = ((@field - 1) / 8) + 1
 
        if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0
        begin
            select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
            if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID', 'VersionNumber')
            begin
                select @causesTimeStampUpdate = 1
            end
        end
    end
 
    if @causesTimeStampUpdate = 1
 
        UPDATE t
        SET t.LastModifiedDateUtc = getutcdate(),
            t.VersionNumber = t.VersionNumber + 1
        FROM  t
        JOIN inserted i ON i.RichCommentID = t.RichCommentID
 
END
GO
PRINT N'Creating ....';
 
 
GO
CREATE trigger . on .
    instead of delete
as
begin
 
SET NOCOUNT ON;
 
-- Delete any referenced attachments
 
Declare @RichCommentID int
Declare @LastModifiedBy varchar(128)
Declare @LastModifiedSystemID int
 
Select @RichCommentID = deleted.RichCommentID
, @LastModifiedBy = deleted.LastModifiedBy
, @LastModifiedSystemID = deleted.LastModifiedSystemID
from deleted
 
update Attachment
set LastModifiedBy = @LastModifiedBy
   ,LastModifiedSystemId = @LastModifiedSystemID
where ParentID = @RichCommentID and ParentTypeID = 1
delete from Attachment where ParentID = @RichCommentID and ParentTypeID = 1
 
delete from RichComment where RichCommentID = @RichCommentID
     
end
GO
PRINT N'Creating ....';
 
 
GO
 
create trigger RichComment_AuditTracking on  for insert, update, delete
as
 
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(100) ,
@fieldtype varchar(50) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql nvarchar(2000),
@ModifiedDate varchar(21),
@UserName varchar(128) ,
@ModifiedSystemID int,
@ChangeType int ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000),
@ProjectIDFieldExists bit,
@ProjectID int
 
select @TableName = 'RichComment'
 
-- date
select @ModifiedDate =  convert(varchar(8), getutcdate(), 112) + ' ' + convert(varchar(12), getutcdate(), 114)
 
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @ChangeType = 1 -- update
else
select @ChangeType = 0 -- insert
else
select @ChangeType = 2 -- delete
 
-- get list of columns
select RichCommentID,ProjectID,ParentID,ParentTypeID,Description,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #ins from inserted
select RichCommentID,ProjectID,ParentID,ParentTypeID,Description,RichDescription,CreatedBy,CreatedDateUtc,CreatedSystemID,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID,VersionNumber into #del from deleted
 
-- Get primary key columns for full outer join
select  @PKCols = coalesce(@PKCols + ' and', ' on') + ' i.' + c.COLUMN_NAME + ' = d.' + c.COLUMN_NAME
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
-- Get primary key fields select for insert
select  @PKFieldSelect = coalesce(@PKFieldSelect+'+','') + '''' + COLUMN_NAME + ''''
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where   pk.TABLE_NAME = @TableName
and     CONSTRAINT_TYPE = 'PRIMARY KEY'
and     c.TABLE_NAME = pk.TABLE_NAME
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @PKValueSelect = coalesce(@PKValueSelect+'+','') + 'convert(varchar(100), coalesce(i.' + COLUMN_NAME + ',d.' + COLUMN_NAME + '))'
from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  
where   pk.TABLE_NAME = @TableName  
and     CONSTRAINT_TYPE = 'PRIMARY KEY'  
and     c.TABLE_NAME = pk.TABLE_NAME  
and     c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
 
select  @ProjectIDFieldExists = COUNT(col.COLUMN_NAME)
from    INFORMATION_SCHEMA.COLUMNS col
where   col.TABLE_NAME = 'RichComment'
and     col.COLUMN_NAME = 'ProjectID'
 
if @ProjectIDFieldExists <> 0
if @ChangeType = 2
    select @sql = 'select @ProjectID = #del.ProjectID from #del'
else
    select @sql = 'select @ProjectID = #ins.ProjectID from #ins'
else
select @sql = 'select @ProjectID = null'
exec sp_executesql
    @query = @sql,
    @params = N'@ProjectID int OUTPUT',
    @ProjectID = @ProjectID OUTPUT
 
select @UserName = #ins.LastModifiedBy from #ins
 
if @ChangeType = 2
    select @sql = 'select @ModifiedSystemID = #del.LastModifiedSystemID from #del'
else
    select @sql = 'select @ModifiedSystemID = #ins.LastModifiedSystemID from #ins'
exec sp_executesql
    @query = @sql,
    @params = N'@ModifiedSystemID int OUTPUT',
    @ModifiedSystemID = @ModifiedSystemID OUTPUT
 
 
if @PKCols is null
begin
    raiserror('no PK on table %s', 16, -1, @TableName)
    return
end
 
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
    select @bit = (@field - 1 )% 8 + 1
    select @bit = power(2,@bit - 1)
    select @char = ((@field - 1) / 8) + 1
 
    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @ChangeType = 0
    begin
        select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
        if @fieldname not in('LastModifiedBy','LastModifiedDateUtc','LastModifiedSystemID','VersionNumber')
            and @fieldname not in (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and DATA_TYPE IN ('image', 'text', 'ntext', 'xml'))
        begin
            select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
            select @sql = @sql + 'select CAST(' + CAST(@ChangeType AS CHAR(1)) + ' AS CHAR(1))'
            select @sql = @sql + ',''' + @TableName + ''''
            select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
            select @sql = @sql + ',' + @PKFieldSelect
            select @sql = @sql + ',' + @PKValueSelect
            select @sql = @sql + ',''' + @fieldname + ''''
            select @sql = @sql + ',convert(varchar(max),d.' + @fieldname + ')'
            select @sql = @sql + ',convert(varchar(max),i.' + @fieldname + ')'
            select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
            select @sql = @sql + ',''' + @UserName + ''''
            select @sql = @sql + ',''' + @ModifiedDate + ''''
            select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
            select @sql = @sql + ' from #ins i full outer join #del d'
            select @sql = @sql + @PKCols
            select @sql = @sql + ' where i.' + @fieldname + ' <> d.' + @fieldname
            select @sql = @sql + ' or (i.' + @fieldname + ' is null and  d.' + @fieldname + ' is not null)'
            select @sql = @sql + ' or (i.' + @fieldname + ' is not null and  d.' + @fieldname + ' is null)'
            exec (@sql)
        end
    end
end
if @ChangeType = 2
begin
    select @sql = 'insert Audit (ChangeTypeID, TableName, ProjectID, PrimaryKeyField, PrimaryKeyValue, RevisionStatus, ModifiedBy, ModifiedDateUtc, ModifiedSystemID)'
    select @sql = @sql + ' select ' + CAST(@ChangeType AS CHAR(1))
    select @sql = @sql + ',''' + @TableName + ''''
    select @sql = @sql + ',' + COALESCE(CAST(@ProjectID AS varchar(8000)),'null')
    select @sql = @sql + ',' + @PKFieldSelect
    select @sql = @sql + ',' + @PKValueSelect
    select @sql = @sql + ',CASE ' + CAST(@ModifiedSystemID AS varchar(8000)) + ' WHEN 0 THEN CAST(0 AS VARCHAR(8000)) ELSE CAST(1 AS VARCHAR(8000)) END'
    select @sql = @sql + ', d.'
    select @sql = @sql + ', getutcdate()'
    select @sql = @sql + ',' + CAST(@ModifiedSystemID AS varchar(8000))
    select @sql = @sql + ' from #del d full outer join #ins i'
    select @sql = @sql + @PKCols
     
    exec (@sql)
end
GO
PRINT N'Altering ....';
 
 
GO
 
-- =============================================
-- Author:      Dave Harris
-- Create date: June 7 2010
-- Description: Modifies or Inserts records in HistoricalStory as required
-- =============================================
ALTER PROCEDURE .
    -- Add the parameters for the stored procedure here
    @newEndDateUtc datetime
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
 
    declare @lastUpdateUtc datetime
    select @lastUpdateUtc = COALESCE(MAX(HistoryEndDateUtc), '1753-01-01')
    from HistoricalStory
 
    update h1
    set HistoryEndDateUtc = @newEndDateUtc
    from HistoricalStory h1
    where h1.StoryID in (select s.StoryID
                      from Story s
                      where s.LastModifiedDateUtc <= @lastUpdateUtc)
      and h1.HistoricalStoryID = (select MAX(h2.HistoricalStoryID)
                               from HistoricalStory h2
                               where h2.StoryID = h1.StoryID)
 
    insert into HistoricalStory (
               ,,,,,,
               ,,,,,,
               ,,,,
               ,,,,,,
               ,,,)
    select
               case when CreatedDateUtc > @lastUpdateUtc
                    then CreatedDateUtc
                    else @lastUpdateUtc
               end
               ,@newEndDateUtc,StoryID,Name,ProjectID,Points,
               ,Complexity,Maturity,Certainty,AreaID,PriorityID,IterationID
               ,PriorityClassification,ValueClassification,AssignedTo,AssignedToUserID
               ,,IsSyncable,IdeaID,CreatedBy,CreatedDateUtc,CreatedSystemID
               ,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID
          from Story
          where StoryID in (select StoryID
                            from Story
                            where LastModifiedDateUtc > @lastUpdateUtc)
           
END
GO
PRINT N'Altering ....';
 
 
GO
ALTER PROCEDURE .
    @projectID INT = NULL,
    @parentID INT,
    @parentTypeID INT,
    @attachmentName VARCHAR(1024),
    @description VARCHAR(2048) = NULL,
    @attachmentSize INT,
    @attachmentFileData VARBINARY(MAX),
    @createdBy VARCHAR(128),
    @createdDateUtc DATETIME,
    @createdSystemID INT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
 
    DECLARE @attachmentID INT
    SELECT @attachmentID = 0
     
    BEGIN TRAN InsertAttachment
     
    INSERT INTO Attachment (,
                            ,
                            ,
                            ,
                            ,
                            ,
                            ,
                            ,
                            ,
                            ,
                            ,
                            )
    VALUES (@projectID,
            @parentID,
            @parentTypeID,
            @attachmentName,
            @description,
            @attachmentSize,
            @createdBy,
            @createdDateUtc,
            @createdSystemID,
            @createdBy,
            @createdDateUtc,
            @createdSystemID)
 
    SELECT @attachmentID = IDENT_CURRENT(N'Attachment')
 
    INSERT INTO AttachmentFile (,
                                ,
                                ,
                                ,
                                ,
                                ,
                                ,
                                ,
                                )
    VALUES (@attachmentID,
            @projectID,
            @attachmentFileData,
            @createdBy,
            @createdDateUtc,
            @createdSystemID,
            @createdBy,
            @createdDateUtc,
            @createdSystemID)
 
    COMMIT TRAN InsertAttachment
 
    SELECT @attachmentID
END
GO
PRINT N'Creating ....';
 
 
GO
 
 
-- =============================================
-- Author:      Greg Peter-Joyal
-- Create date: September 21 2010
-- Description: Modifies or Inserts records in HistoricalIdea as required
-- =============================================
CREATE PROCEDURE .
    -- Add the parameters for the stored procedure here
    @newEndDateUtc datetime
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
 
    declare @lastUpdateUtc datetime
    select @lastUpdateUtc = COALESCE(MAX(HistoryEndDateUtc), '1753-01-01')
    from HistoricalIdea
 
    update h1
    set HistoryEndDateUtc = @newEndDateUtc
    from HistoricalIdea h1
    where h1.IdeaID in (select i.IdeaID
                      from Idea i
                      where i.LastModifiedDateUtc <= @lastUpdateUtc)
      and h1.HistoricalIdeaID = (select MAX(h2.HistoricalIdeaID)
                               from HistoricalIdea h2
                               where h2.IdeaID = h1.IdeaID)
 
    insert into HistoricalIdea (,,
           ,,,,,,,,
           ,,,,)
    select
               case when CreatedDateUtc > @lastUpdateUtc
                    then CreatedDateUtc
                    else @lastUpdateUtc
               end
               ,@newEndDateUtc,IdeaID,ProjectID,,,,,RichDescription
               ,CreatedBy,CreatedDateUtc,CreatedSystemID
               ,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID
          from Idea
          where IdeaID in (select IdeaID
                            from Idea
                            where LastModifiedDateUtc > @lastUpdateUtc)
           
END
GO
PRINT N'Creating ....';
 
 
GO
 
 
-- =============================================
-- Author:      Greg Peter-Joyal
-- Create date: September 21 2010
-- Description: Modifies or Inserts records in HistoricalRichComment as required
-- =============================================
CREATE PROCEDURE .
    -- Add the parameters for the stored procedure here
    @newEndDateUtc datetime
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
 
    declare @lastUpdateUtc datetime
    select @lastUpdateUtc = COALESCE(MAX(HistoryEndDateUtc), '1753-01-01')
    from HistoricalRichComment
 
    update h1
    set HistoryEndDateUtc = @newEndDateUtc
    from HistoricalRichComment h1
    where h1.RichCommentID in (select r.RichCommentID
                      from RichComment r
                      where r.LastModifiedDateUtc <= @lastUpdateUtc)
      and h1.HistoricalRichCommentID = (select MAX(h2.HistoricalRichCommentID)
                               from HistoricalRichComment h2
                               where h2.RichCommentID = h1.RichCommentID)
 
    insert into HistoricalRichComment (,,
           ,,,,,,,
           ,,,,)
    select
               case when CreatedDateUtc > @lastUpdateUtc
                    then CreatedDateUtc
                    else @lastUpdateUtc
               end
               ,@newEndDateUtc,RichCommentID,ProjectID,,,,
               ,CreatedBy,CreatedDateUtc,CreatedSystemID
               ,LastModifiedBy,LastModifiedDateUtc,LastModifiedSystemID
          from RichComment
          where RichCommentID in (select RichCommentID
                            from RichComment
                            where LastModifiedDateUtc > @lastUpdateUtc)
           
END
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION .
(  
)
RETURNS TABLE
AS
RETURN
(
    select
        ProjectID,
        (select count(*) from SynchronizationConflict where ProjectID = s.ProjectID) + (select count(*) from SynchronizationError where ProjectID = s.ProjectID) as ErrorCount,
        (select SyncStatus from ProjectSync where ProjectID = s.ProjectID) as SyncStatus
    from Project as s
)
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION StoryCountSummary
(  
)
RETURNS TABLE
AS
RETURN
(
    select
        ProjectID,
        IterationID,
        Status,
        (select count(*) from Story where ProjectID = s.ProjectID) as OverallCount,
        (select count(*) from Story where ProjectID = s.ProjectID AND IterationID = s.IterationID) as IterationCount,
        COUNT(Status) as StatusCount
    from Story as s
    group by projectid, iterationid, status
     
)
GO
PRINT N'Altering ....';
 
 
GO
 
ALTER FUNCTION .
(
)
RETURNS TABLE
AS
RETURN
(
SELECT     ROW_NUMBER() OVER(Order By ProjectID ASC, AssignedToUserID ASC) as RowID,   
               ProjectID,
               AssignedToUserID,
               AssignedTo,
               IterationID,
               u.IsEnabled,
               u.DeletionDate,
               (SELECT     COUNT(*) AS Expr1
                 FROM          dbo.Story
                 WHERE      (Status NOT IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS TotalCount,
                  
               (SELECT     COUNT(*) AS Expr1
                 FROM          dbo.Story AS Story_3
                 WHERE      (Status IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS DoneCount,
                  
               (SELECT     SUM(Points) AS Expr1
                 FROM          dbo.Story AS Story_2
                 WHERE      (Status NOT IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS TotalPoints,
                  
               (SELECT     SUM(Points) AS Expr1
                 FROM          dbo.Story AS Story_1
                 WHERE      (Status IN (SELECT value FROM StringListToTable((SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) ))
                            AND (ProjectID = s.ProjectID) AND (IsNull(AssignedToUserID, -1) = IsNull(s.AssignedToUserID, -1))
                            AND (IsNull(AssignedTo, '') = IsNull(s.AssignedTo, ''))
                            AND (IterationID = s.IterationID)) AS DonePoints
                  
    FROM dbo.Story AS s LEFT OUTER JOIN  u ON s.AssignedToUserID = u.UserID
    GROUP BY ProjectID, AssignedToUserID, IterationID, AssignedTo, u.IsEnabled, u.DeletionDate
 
)
GO
PRINT N'Altering ....';
 
 
GO
ALTER FUNCTION .
(
)
RETURNS TABLE AS RETURN
(
    SELECT
        StoryID,
         
        (SELECT count(*) FROM Task WHERE StoryID = s.StoryID
            AND (Status IN (SELECT value FROM StringListToTable(
                (SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/DoneStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) )))
        AS TasksCompletedCount,
 
        (SELECT count(*) FROM Task WHERE StoryID = s.StoryID
            AND (Status NOT IN (SELECT value FROM StringListToTable(
                (SELECT p.Settings.value('(./ProjectSettings/EntityDefinitions/EntityDefinition/Workflow/ExcludedStatuses)','varchar(255)') FROM Project p WHERE p.ProjectID = s.ProjectID)) )) )
        AS TasksIncludedCount
 
    FROM Story as s
)
GO
PRINT N'Refreshing ....';
 
 
GO
EXECUTE sp_refreshview N'dbo.RelatedStory';
 
 
GO
PRINT N'Altering ....';
 
 
GO
ALTER VIEW dbo.StorySynchronizationStatusView
AS
SELECT     ss.SynchronizationStatusID, s.ProjectID, s.StoryID AS EntityID, 'Story' AS EntityType, ss.Status, ss.TargetID,
                      ss.LastSuccessfulSyncDateUtc, ss.CreatedBy, ss.CreatedDateUtc, ss.CreatedSystemID, ss.LastModifiedBy, ss.LastModifiedDateUtc,
                      ss.LastModifiedSystemID
FROM         dbo.Story AS s LEFT OUTER JOIN
                      dbo.SynchronizationStatus AS ss ON s.StoryID = ss.EntityId AND ss.EntityType = 'Story'
GO
PRINT N'Refreshing ....';
 
 
GO
EXECUTE sp_refreshview N'dbo.IterationCapacity';
 
 
GO
PRINT N'Creating ....';
 
 
GO
CREATE VIEW dbo.SyncConflictView
AS
SELECT     dbo.SynchronizationConflict.SynchronizationConflictID, dbo.SynchronizationConflict.SynchronizationStatusID, dbo.SynchronizationConflict.ProjectID,
                      dbo.SynchronizationStatus.EntityId, dbo.SynchronizationStatus.EntityType, dbo.Story.Name, dbo.SynchronizationConflict.ConflictType,
                      dbo.SynchronizationConflict.FieldName, dbo.SynchronizationConflict.SourceValue, dbo.SynchronizationConflict.SourceChangeDateUtc,
                      dbo.SynchronizationConflict.SourceModifiedBy, dbo.SynchronizationConflict.DestinationFieldDisplayName, dbo.SynchronizationConflict.DestinationValue,
                      dbo.SynchronizationConflict.DestinationChangeDateUtc, dbo.SynchronizationConflict.DestinationModifiedBy, dbo.SynchronizationConflict.ResolutionType,
                      dbo.SynchronizationConflict.CreatedBy, dbo.SynchronizationConflict.CreatedDateUtc, dbo.SynchronizationConflict.CreatedSystemID,
                      dbo.SynchronizationConflict.LastModifiedBy, dbo.SynchronizationConflict.LastModifiedDateUtc, dbo.SynchronizationConflict.LastModifiedSystemID,
                      dbo.SynchronizationConflict.VersionNumber
FROM         dbo.SynchronizationConflict INNER JOIN
                      dbo.SynchronizationStatus ON dbo.SynchronizationConflict.SynchronizationStatusID = dbo.SynchronizationStatus.SynchronizationStatusID INNER JOIN
                      dbo.Story ON dbo.SynchronizationStatus.EntityId = dbo.Story.StoryID
WHERE     (dbo.SynchronizationStatus.EntityType = 'Story')
GO
PRINT N'Creating ....';
 
 
GO
CREATE VIEW dbo.SyncErrorView
AS
SELECT     dbo.SynchronizationError.SynchronizationErrorID, dbo.SynchronizationError.SynchronizationStatusID, dbo.SynchronizationError.ProjectID,
                      dbo.SynchronizationStatus.EntityId, dbo.SynchronizationStatus.EntityType, dbo.Story.Name, dbo.SynchronizationError.ErrorType,
                      dbo.SynchronizationError.ErrorDateUtc, dbo.SynchronizationError.Message, dbo.SynchronizationError.CreatedBy, dbo.SynchronizationError.CreatedDateUtc,
                      dbo.SynchronizationError.CreatedSystemID, dbo.SynchronizationError.LastModifiedBy, dbo.SynchronizationError.LastModifiedDateUtc,
                      dbo.SynchronizationError.LastModifiedSystemID, dbo.SynchronizationError.VersionNumber
FROM         dbo.SynchronizationStatus INNER JOIN
                      dbo.SynchronizationError ON dbo.SynchronizationStatus.SynchronizationStatusID = dbo.SynchronizationError.SynchronizationStatusID INNER JOIN
                      dbo.Story ON dbo.SynchronizationStatus.EntityId = dbo.Story.StoryID
WHERE     (dbo.SynchronizationStatus.EntityType = 'Story')
GO
PRINT N'Checking existing data against newly created constraints';
 
 
GO
USE ;
 
 
GO
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
ALTER TABLE . WITH CHECK CHECK CONSTRAINT ;
 
 
GO
 on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Failed to execute sql, exception details: Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. ---> System.Data.SqlClient.SqlException: 'DF__Historica__Versi__31B762FC' is not a constraint.
Could not drop constraint. See previous errors.
   at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
   --- End of inner exception stack trace ---
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand)
   at DatabaseExtensions.CustomActions.ExecuteSQL(Session session, Server server, String sql)
MSI (s) (88!74) [16:37:41:326]: PROPERTY CHANGE: Adding INSTALLERROR property. Its value is '**********'.
Result: Failure
Rolling back installation transaction...
Executing sql script ROLLBACK TRANSACTION TeamPulseInstallTrans on connection server=BUMBLEBEE;Integrated Security=true;DATABASE=master
Failed to execute sql, exception details: Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. ---> System.Data.SqlClient.SqlException: The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
   at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
   --- End of inner exception stack trace ---
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand)
   at DatabaseExtensions.CustomActions.ExecuteSQL(Session session, Server server, String sql)
Action ended 16:37:41: RunSQLScripts. Return value 3.
MSI (s) (88:58) [16:37:41:616]: Machine policy value 'DisableRollback' is 0
MSI (s) (88:58) [16:37:41:616]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (88:58) [16:37:41:617]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (88:58) [16:37:41:617]: No System Restore sequence number for this installation.
MSI (s) (88:58) [16:37:41:617]: Unlocking Server
Action ended 16:37:41: INSTALL. Return value 3.
Property(S): VirtualMemory = 7411
Property(S): UpgradeCode = {03AA1D0A-ABCB-4610-99C5-B53CA5DDB9A4}
Property(S): ASPNET = #1
Property(S): ASPNET64 = #1
Property(S): IIS7ADMINSVC = #1
Property(S): IIS7ADMINSVC64 = #1
Property(S): IIS7MGMTCONSOLE = #1
Property(S): IIS7MGMTCONSOLE64 = #1
Property(S): IIS7WINDOWSAUTH = #1
Property(S): IIS7WINDOWSAUTH64 = #1
Property(S): DEFAULTDOCUMENT = #1
Property(S): DEFAULTDOCUMENT64 = #1
Property(S): HTTPREDIRECTION = #1
Property(S): HTTPREDIRECTION64 = #1
Property(S): STATICCONTENT = #1
Property(S): STATICCONTENT64 = #1
Property(S): NETFRAMEWORK40 = C:\Windows\Microsoft.NET\Framework\v4.0.30319\
Property(S): INSTALLLOCATION = C:\Program Files\Telerik\TeamPulse\
Property(S): NETSH = C:\Windows\system32\Netsh.exe
Property(S): IISMAJORVERSION = #7
Property(S): IISMINORVERSION = #0
Property(S): ShouldLaunchInstallHelp = 1
Property(S): WebRoot = C:\Program Files\Telerik\TeamPulse\wwwroot\
Property(S): CommonFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Common\
Property(S): DownloadFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Download\
Property(S): ImagesFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Images\
Property(S): ServiceFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Services\
Property(S): TempStorage.Folder = C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\
Property(S): FeedsFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\
Property(S): ClientBinFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\
Property(S): binFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\bin\
Property(S): UserManagementRoot = C:\Program Files\Telerik\TeamPulse\UserManagement\
Property(S): bin = C:\Program Files\Telerik\TeamPulse\UserManagement\bin\
Property(S): Content = C:\Program Files\Telerik\TeamPulse\UserManagement\Content\
Property(S): Images = C:\Program Files\Telerik\TeamPulse\UserManagement\Images\
Property(S): Scripts = C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\
Property(S): Views = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\
Property(S): Home = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\
Property(S): EditorTemplates = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\
Property(S): License = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\
Property(S): Shared = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\
Property(S): Activation = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\
Property(S): Welcome = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\
Property(S): Release = C:\Program Files\Telerik\TeamPulse\IntegrationService\
Property(S): MappingDefaults = C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\
Property(S): logs.Folder = C:\Program Files\Telerik\TeamPulse\Logs\
Property(S): ProgramTelerikDir = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\
Property(S): ProgramMenuDir = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\
Property(S): USERINFORBGSELECTION = 0
Property(S): DOMAIN = BUMBLEBEE
Property(S): USERNAME = Administrator
Property(S): DB_PATH = BUMBLEBEE
Property(S): DB_DOMAIN = BUMBLEBEE
Property(S): DB_USERNAME = Administrator
Property(S): DB_PASSWORD = **********
Property(S): WIXUI_INSTALLDIR = INSTALLLOCATION
Property(S): WixUIRMOption = UseRM
Property(S): INSTALLERROR = **********
Property(S): ARPNOREPAIR = 1
Property(S): CleanupExistingTeampulseSite = SystemFolder=C:\Windows\system32\
Property(S): CleanupExistingUserManagementSite = SystemFolder=C:\Windows\system32\
Property(S): CleanupExistingApplicationPool = SystemFolder=C:\Windows\system32\
Property(S): CreateApplicationPool = **********
Property(S): ConfigureTeamPulseWebSites = SystemFolder=C:\Windows\system32\;INSTALLDIR=C:\Program Files\Telerik\TeamPulse\;NETFRAMEWORK40=C:\Windows\Microsoft.NET\Framework\v4.0.30319\
Property(S): FixupIIS = SystemFolder=C:\Windows\system32\;INSTALLDIR=C:\Program Files\Telerik\TeamPulse\;NETFRAMEWORK40=C:\Windows\Microsoft.NET\Framework\v4.0.30319\
Property(S): RegisterNamespaces = DB_DOMAIN=BUMBLEBEE;DB_USERNAME=Administrator;NETSH=C:\Windows\system32\Netsh.exe
Property(S): UnregisterNamespaces = NETSH=C:\Windows\system32\Netsh.exe
Property(S): ExecXmlFile = 1€1€C:\Program Files\Telerik\TeamPulse\wwwroot\Web.Config€3€0€/configuration/connectionStrings/add[@name='TeamPulse.Core.Properties.Settings.TeamPulseConnectionString']/@connectionString€€server=BUMBLEBEE;Integrated Security=true;DATABASE=TeamPulse€3€0€/configuration/appSettings/add[@key='CompanyLicenseName']/@value€€TeamPulse€3€0€/configuration/appSettings/add[@key='MachineID']/@value€€o2BV4oz2NF2wnV8hSX4wFBeOq8M5js6TKM1+I4sM1lE=€3€0€/configuration/appSettings/add[@key='UserManagementURL']/@value€€http://BUMBLEBEE:9897/€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Services.AuthorizationService']/endpoint/@bindingConfiguration€€windowsHttp€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Feeds.ChartFeed']/endpoint/@bindingConfiguration€€windowsRss€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Feeds.NewsFeed']/endpoint/@bindingConfiguration€€windowsRss€3€0€/configuration/system.serviceModel/client/endpoint[@contract='BestPracticeService.IBestPracticeService']/@address€€http://BUMBLEBEE:9899/TeamPulse.Services/BestPractices/€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Services.BestPracticeService']/endpoint/@bindingConfiguration€€windowsHttp€3€0€/configuration/system.serviceModel/client/endpoint[@contract='SynchronizationService.ISynchronizationService']/@address€€http://BUMBLEBEE:9899/TeamPulse.Services/Synchronization/€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Services.SynchronizationService']/endpoint/@bindingConfiguration€€windowsHttp€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Client.Host.Services.FileService']/endpoint/@bindingConfiguration€€windowsHttp€3€0€/configuration/log4net/appender[@name='RollingFileAppender']/file/@value€€C:\Program Files\Telerik\TeamPulse\Logs\web-log.txt€1€1€C:\Program Files\Telerik\TeamPulse\UserManagement\Web.config€3€0€/configuration/appSettings/add[@key='MachineID']/@value€€o2BV4oz2NF2wnV8hSX4wFBeOq8M5js6TKM1+I4sM1lE=€3€0€/configuration/connectionStrings/add[@name='TeamPulseConnectionString']/@connectionString€€server=BUMBLEBEE;Integrated Security=true;DATABASE=TeamPulse€3€0€/configuration/appSettings/add[@key='ManualActivationFormURL']/@value€€http://www.telerik.com/team-productivity-tools/account/license-keys.aspx?utm_source=TeamPulse_user_management&utm_medium=banner&utm_campaign=account_license_keys€3€0€/configuration/appSettings/add[@key='ManualDeactivationFormURL']/@value€€http://www.telerik.com/team-productivity-tools/account/license-keys/manual-deactivation.aspx?utm_source=TeamPulse_user_management&utm_medium=banner&utm_campaign=account_license-keys_manual-deactivation€3€0€/configuration/appSettings/add[@key='SupportURL']/@value€€http://www.telerik.com/team-productivity-tools/support-resources?utm_source=TeamPulse_user_management&utm_medium=banner&utm_campaign=support€3€0€/configuration/system.serviceModel/client/endpoint[@contract='ILicenseTeamPulseService']/@address€€https://www.telerik.com/services/LicenseService/Service.svc€3€0€/configuration/appSettings/add[@key='TeamPulseURL']/@value€€http://BUMBLEBEE:9898/€1€1€C:\Program Files\Telerik\TeamPulse\IntegrationService\TeamPulse.Integration.Service.exe.config€3€0€/configuration/connectionStrings/add[@name='TeamPulseConnectionString']/@connectionString€€server=BUMBLEBEE;Integrated Security=true;DATABASE=TeamPulse€3€0€/configuration/log4net/appender[@name='RollingFileAppender']/file/@value€€C:\Program Files\Telerik\TeamPulse\Logs\integration-log.txt€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Integration.Core.Services.SynchronizationService']/host/baseAddresses/add/@baseAddress€€http://BUMBLEBEE:9899/TeamPulse.Services/Synchronization/€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Integration.Core.CrossDomain.CrossDomainService']/host/baseAddresses/add/@baseAddress€€http://BUMBLEBEE:9899€3€0€/configuration/system.serviceModel/services/service[@name='TeamPulse.Integration.Core.Services.BestPracticeService']/host/baseAddresses/add/@baseAddress€€http://BUMBLEBEE:9899/TeamPulse.Services/BestPractices/€3€0€/configuration/appSettings/add[@key='ChartFilesBaseDirectory']/@value€€..\wwwroot\Images\Charts€1€1€C:\Program Files\Telerik\TeamPulse\IntegrationService\TeamPulse.Integration.Service.exe.config€3€0€/configuration/appSettings/add[@key='MachineID']/@value€€o2BV4oz2NF2wnV8hSX4wFBeOq8M5js6TKM1+I4sM1lE=
Property(S): CreateUser = **********
Property(S): COMPANYNAME = TeamPulse
Property(S): IntegrationService = C:\Program Files\Telerik\TeamPulse\
Property(S): TelerikFolder = C:\Program Files\Telerik\
Property(S): ProgramFilesFolder = C:\Program Files\
Property(S): TARGETDIR = C:\
Property(S): ProgramMenuFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
Property(S): SourceDir = C:\
Property(S): VersionNT = 600
Property(S): Manufacturer = Telerik
Property(S): ProductCode = {02E84302-F860-462A-BF16-FE2D92A4A06A}
Property(S): ProductLanguage = 1033
Property(S): ProductName = Telerik TeamPulse
Property(S): ProductVersion = 103.11.17.0
Property(S): IISMAJORVERSION_MSG = TeamPulse requires Internet Information Services 7 (or above) to be installed.
Property(S): ASPNET_MSG = IIS ASP.NET component is required.
Property(S): IIS7ADMINSVC_MSG = IIS Management Console or Management Service component is required.
Property(S): IIS7WINDOWSAUTH_MSG = IIS Windows Authentication component is required.
Property(S): DEFAULTDOCUMENT_MSG = IIS Default Document component is required.
Property(S): HTTPREDIRECTION_MSG = IIS HTTP Redirection component is required.
Property(S): STATICCONTENT_MSG = IIS Static Content component is required.
Property(S): NETFRAMEWORK40_MSG = TeamPulse requires .NET Framework 4.0 RTM to be installed.
Property(S): ISCORRECTNETFRAMEWORK40VERSION = 1
Property(S): GENERIC_ERROR_MSG = An unexpected error has occurred.
Property(S): IntegrationServicePortNumber = 9899
Property(S): IntegrationServiceName = TeamPulseIntegrationService
Property(S): PRODUCTSHORTNAME = TeamPulse Community Edition
Property(S): PRODUCTMAJORRELEASE = 2010.3.1117.0
Property(S): RELEASEDATE = 2010/11/17
Property(S): AUTOACTIVATIONSERVICEURL = https://www.telerik.com/services/LicenseService/Service.svc
Property(S): INSTALLLOCATIONFOUND = 0
Property(S): TEAMPULSE_CONNECTION_STRING = **********
Property(S): SERVER_CONNECTION_STRING = **********
Property(S): DB_LOGIN_TYPE = WinAuthCurrentUser
Property(S): DB_CONNECTION_RESULT = -1
Property(S): DB_LAST_CONNECTION_RESULT = 1
Property(S): DB_COLLATION = **********
Property(S): WELCOMEPAGE = http://localhost:9897/Welcome
Property(S): BOOKMARK_ASPNET = #aspnet
Property(S): BOOKMARK_IIS7 = #IIS7
Property(S): BOOKMARK_IIS7ADMINSVC = #iismng
Property(S): BOOKMARK_IIS7_WIN_AUTH = #iisauth
Property(S): BOOKMARK_DEFAULT_DOC = #iisdoc
Property(S): BOOKMARK_STATIC_CONTENT = #iishttp
Property(S): BOOKMARK_HTTP_REDIRECTION = #iisredirection
Property(S): BOOKMARK_SQL2008 = #SQL2008
Property(S): ARPPRODUCTICON = ProgramIcon
Property(S): ARPHELPLINK = http://www.telerik.com/
Property(S): ACTIVATION = bIAcLFxPdF3nGFq5rI0YkI2lYVCRFCYIYO7HXlgW/q9fbUQFCI5cdA==
Property(S): INSTALL_THIS_COMPONENT = no
Property(S): ShouldLaunchDemos = 1
Property(S): ShouldLaunchReadme = 1
Property(S): DefaultUIFont = Telerik_Font_MidSizeText
Property(S): ARPNOMODIFY = 1
Property(S): INSTALL_ENABLED_NEXT_BTN = 1
Property(S): UNINSTALL_ENABLED_NEXT_BTN = 1
Property(S): ErrorDialog = ErrorDlg
Property(S): SecureCustomProperties = BETADETECTED;NETSH;NEWERVERSIONDETECTED;PREVIOUSVERSIONDETECTED
Property(S): MsiHiddenProperties = CreateApplicationPool;CreateUser;DB_COLLATION;DB_PASSWORD;INSTALLERROR;INSTALLREDIRECTPAGE;MACHINEID;SERVER_CONNECTION_STRING;TEAMPULSE_CONNECTION_STRING
Property(S): MsiLogFileLocation = C:\teampulselog.txt
Property(S): PackageCode = {99765709-1FEF-4648-A08B-9B16F74CFA8D}
Property(S): ProductState = -1
Property(S): PackagecodeChanging = 1
Property(S): CURRENTDIRECTORY = C:\
Property(S): CLIENTUILEVEL = 0
Property(S): CLIENTPROCESSID = 3716
Property(S): VersionDatabase = 200
Property(S): ACTION = INSTALL
Property(S): EXECUTEACTION = INSTALL
Property(S): SECONDSEQUENCE = 1
Property(S): ROOTDRIVE = C:\
Property(S): INSTALLLEVEL = 1000
Property(S): MACHINEID = **********
Property(S): ADDLOCAL = ProductFeature
Property(S): VersionMsi = 4.05
Property(S): WindowsBuild = 6002
Property(S): ServicePackLevel = 2
Property(S): ServicePackLevelMinor = 0
Property(S): MsiNTProductType = 3
Property(S): WindowsFolder = C:\Windows\
Property(S): WindowsVolume = C:\
Property(S): SystemFolder = C:\Windows\system32\
Property(S): System16Folder = C:\Windows\system\
Property(S): RemoteAdminTS = 1
Property(S): TempFolder = C:\Users\ADMINI~1\AppData\Local\Temp\
Property(S): CommonFilesFolder = C:\Program Files\Common Files\
Property(S): AppDataFolder = C:\Users\Administrator\AppData\Roaming\
Property(S): FavoritesFolder = C:\Users\Administrator\Favorites\
Property(S): NetHoodFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts\
Property(S): PersonalFolder = C:\Users\Administrator\Documents\
Property(S): PrintHoodFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Printer Shortcuts\
Property(S): RecentFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent\
Property(S): SendToFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo\
Property(S): TemplateFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates\
Property(S): CommonAppDataFolder = C:\ProgramData\
Property(S): LocalAppDataFolder = C:\Users\Administrator\AppData\Local\
Property(S): MyPicturesFolder = C:\Users\Administrator\Pictures\
Property(S): AdminToolsFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools\
Property(S): StartupFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
Property(S): StartMenuFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\
Property(S): DesktopFolder = C:\Users\Administrator\Desktop\
Property(S): FontsFolder = C:\Windows\Fonts\
Property(S): GPTSupport = 1
Property(S): OLEAdvtSupport = 1
Property(S): ShellAdvtSupport = 1
Property(S): Intel = 6
Property(S): PhysicalMemory = 4060
Property(S): AdminUser = 1
Property(S): LogonUser = Administrator
Property(S): UserSID = S-1-5-21-1565970331-1841932326-737719383-500
Property(S): UserLanguageID = 6153
Property(S): ComputerName = BUMBLEBEE
Property(S): SystemLanguageID = 6153
Property(S): ScreenX = 1024
Property(S): ScreenY = 768
Property(S): CaptionHeight = 19
Property(S): BorderTop = 1
Property(S): BorderSide = 1
Property(S): TextHeight = 16
Property(S): TextInternalLeading = 3
Property(S): ColorBits = 32
Property(S): TTCSupport = 1
Property(S): Time = 16:37:41
Property(S): Date = 26/11/2010
Property(S): MsiNetAssemblySupport = 4.0.30319.1
Property(S): MsiWin32AssemblySupport = 6.0.6001.18000
Property(S): RedirectedDllSupport = 2
Property(S): MsiRunningElevated = 1
Property(S): Privileged = 1
Property(S): DATABASE = C:\Windows\Installer\27ba3a.msi
Property(S): OriginalDatabase = C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
Property(S): UILevel = 5
Property(S): Preselected = 1
Property(S): CostingComplete = 1
Property(S): OutOfDiskSpace = 0
Property(S): OutOfNoRbDiskSpace = 0
Property(S): PrimaryVolumeSpaceAvailable = 0
Property(S): PrimaryVolumeSpaceRequired = 0
Property(S): PrimaryVolumeSpaceRemaining = 0
Property(S): SourcedirProduct = {02E84302-F860-462A-BF16-FE2D92A4A06A}
Property(S): SOURCEDIR = C:\
MSI (s) (88:58) [16:37:41:751]: MainEngineThread is returning 1603
MSI (s) (88:C0) [16:37:41:752]: RESTART MANAGER: Session closed.
MSI (s) (88:C0) [16:37:41:752]: No System Restore sequence number for this installation.
MSI (s) (88:C0) [16:37:41:753]: User policy value 'DisableRollback' is 0
MSI (s) (88:C0) [16:37:41:753]: Machine policy value 'DisableRollback' is 0
MSI (s) (88:C0) [16:37:41:753]: Incrementing counter to disable shutdown. Counter after increment: 0
MSI (s) (88:C0) [16:37:41:753]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (88:C0) [16:37:41:753]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (88:C0) [16:37:41:754]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied.  Counter after decrement: -1
MSI (s) (88:C0) [16:37:41:755]: Restoring environment variables
MSI (s) (88:C0) [16:37:41:755]: Destroying RemoteAPI object.
MSI (s) (88:B0) [16:37:41:755]: Custom Action Manager thread ending.
MSI (c) (84:D0) [16:37:41:756]: Back from server. Return value: 1603
MSI (c) (84:D0) [16:37:41:757]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied.  Counter after decrement: -1
MSI (c) (84:D0) [16:37:41:757]: PROPERTY CHANGE: Deleting SECONDSEQUENCE property. Its current value is '1'.
Action ended 16:37:41: ExecuteAction. Return value 3.
MSI (c) (84:D0) [16:37:41:757]: Doing action: FatalErrorTelerik
Action 16:37:41: FatalErrorTelerik.
Action start 16:37:41: FatalErrorTelerik.
Action 16:37:41: FatalErrorTelerik. Dialog created
MSI (c) (84:B0) [16:37:45:112]: PROPERTY CHANGE: Deleting ShouldLaunchInstallHelp property. Its current value is '1'.
Action ended 16:37:46: FatalErrorTelerik. Return value 2.
Action ended 16:37:46: INSTALL. Return value 3.
MSI (c) (84:D0) [16:37:46:023]: Destroying RemoteAPI object.
MSI (c) (84:BC) [16:37:46:025]: Custom Action Manager thread ending.
Property(C): VirtualMemory = 7425
Property(C): UpgradeCode = {03AA1D0A-ABCB-4610-99C5-B53CA5DDB9A4}
Property(C): ASPNET = #1
Property(C): ASPNET64 = #1
Property(C): IIS7ADMINSVC = #1
Property(C): IIS7ADMINSVC64 = #1
Property(C): IIS7MGMTCONSOLE = #1
Property(C): IIS7MGMTCONSOLE64 = #1
Property(C): IIS7WINDOWSAUTH = #1
Property(C): IIS7WINDOWSAUTH64 = #1
Property(C): DEFAULTDOCUMENT = #1
Property(C): DEFAULTDOCUMENT64 = #1
Property(C): HTTPREDIRECTION = #1
Property(C): HTTPREDIRECTION64 = #1
Property(C): STATICCONTENT = #1
Property(C): STATICCONTENT64 = #1
Property(C): NETFRAMEWORK40 = C:\Windows\Microsoft.NET\Framework\v4.0.30319\
Property(C): INSTALLLOCATION = C:\Program Files\Telerik\TeamPulse\
Property(C): NETSH = C:\Windows\system32\Netsh.exe
Property(C): IISMAJORVERSION = #7
Property(C): IISMINORVERSION = #0
Property(C): LicenseAccepted = 1
Property(C): WebRoot = C:\Program Files\Telerik\TeamPulse\wwwroot\
Property(C): CommonFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Common\
Property(C): DownloadFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Download\
Property(C): ImagesFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Images\
Property(C): ServiceFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Services\
Property(C): TempStorage.Folder = C:\Program Files\Telerik\TeamPulse\wwwroot\Services\TempStorage\
Property(C): FeedsFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\Feeds\
Property(C): ClientBinFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\ClientBin\
Property(C): binFolder = C:\Program Files\Telerik\TeamPulse\wwwroot\bin\
Property(C): UserManagementRoot = C:\Program Files\Telerik\TeamPulse\UserManagement\
Property(C): bin = C:\Program Files\Telerik\TeamPulse\UserManagement\bin\
Property(C): Content = C:\Program Files\Telerik\TeamPulse\UserManagement\Content\
Property(C): Images = C:\Program Files\Telerik\TeamPulse\UserManagement\Images\
Property(C): Scripts = C:\Program Files\Telerik\TeamPulse\UserManagement\Scripts\
Property(C): Views = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\
Property(C): Home = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\
Property(C): EditorTemplates = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Home\EditorTemplates\
Property(C): License = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\License\
Property(C): Shared = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Shared\
Property(C): Activation = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Activation\
Property(C): Welcome = C:\Program Files\Telerik\TeamPulse\UserManagement\Views\Welcome\
Property(C): Release = C:\Program Files\Telerik\TeamPulse\IntegrationService\
Property(C): MappingDefaults = C:\Program Files\Telerik\TeamPulse\IntegrationService\MappingDefaults\
Property(C): logs.Folder = C:\Program Files\Telerik\TeamPulse\Logs\
Property(C): ProgramTelerikDir = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\
Property(C): ProgramMenuDir = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Telerik\TeamPulse\
Property(C): USERINFORBGSELECTION = 0
Property(C): DOMAIN = BUMBLEBEE
Property(C): USERNAME = Administrator
Property(C): DB_PATH = BUMBLEBEE
Property(C): DB_DOMAIN = BUMBLEBEE
Property(C): DB_USERNAME = Administrator
Property(C): DB_PASSWORD = **********
Property(C): WIXUI_INSTALLDIR = INSTALLLOCATION
Property(C): WixUIRMOption = UseRM
Property(C): ARPNOREPAIR = 1
Property(C): CreateUser = **********
Property(C): COMPANYNAME = TeamPulse
Property(C): IntegrationService = C:\Program Files\Telerik\TeamPulse\
Property(C): TelerikFolder = C:\Program Files\Telerik\
Property(C): ProgramFilesFolder = C:\Program Files\
Property(C): TARGETDIR = C:\
Property(C): ProgramMenuFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
Property(C): SourceDir = C:\
Property(C): VersionNT = 600
Property(C): Manufacturer = Telerik
Property(C): ProductCode = {02E84302-F860-462A-BF16-FE2D92A4A06A}
Property(C): ProductLanguage = 1033
Property(C): ProductName = Telerik TeamPulse
Property(C): ProductVersion = 103.11.17.0
Property(C): IISMAJORVERSION_MSG = TeamPulse requires Internet Information Services 7 (or above) to be installed.
Property(C): ASPNET_MSG = IIS ASP.NET component is required.
Property(C): IIS7ADMINSVC_MSG = IIS Management Console or Management Service component is required.
Property(C): IIS7WINDOWSAUTH_MSG = IIS Windows Authentication component is required.
Property(C): DEFAULTDOCUMENT_MSG = IIS Default Document component is required.
Property(C): HTTPREDIRECTION_MSG = IIS HTTP Redirection component is required.
Property(C): STATICCONTENT_MSG = IIS Static Content component is required.
Property(C): NETFRAMEWORK40_MSG = TeamPulse requires .NET Framework 4.0 RTM to be installed.
Property(C): ISCORRECTNETFRAMEWORK40VERSION = 1
Property(C): GENERIC_ERROR_MSG = An unexpected error has occurred.
Property(C): IntegrationServicePortNumber = 9899
Property(C): IntegrationServiceName = TeamPulseIntegrationService
Property(C): PRODUCTSHORTNAME = TeamPulse Community Edition
Property(C): PRODUCTMAJORRELEASE = 2010.3.1117.0
Property(C): RELEASEDATE = 2010/11/17
Property(C): AUTOACTIVATIONSERVICEURL = https://www.telerik.com/services/LicenseService/Service.svc
Property(C): INSTALLLOCATIONFOUND = 0
Property(C): TEAMPULSE_CONNECTION_STRING = **********
Property(C): SERVER_CONNECTION_STRING = **********
Property(C): DB_LOGIN_TYPE = WinAuthCurrentUser
Property(C): DB_CONNECTION_RESULT = -1
Property(C): DB_LAST_CONNECTION_RESULT = 1
Property(C): DB_COLLATION = **********
Property(C): WELCOMEPAGE = http://localhost:9897/Welcome
Property(C): BOOKMARK_ASPNET = #aspnet
Property(C): BOOKMARK_IIS7 = #IIS7
Property(C): BOOKMARK_IIS7ADMINSVC = #iismng
Property(C): BOOKMARK_IIS7_WIN_AUTH = #iisauth
Property(C): BOOKMARK_DEFAULT_DOC = #iisdoc
Property(C): BOOKMARK_STATIC_CONTENT = #iishttp
Property(C): BOOKMARK_HTTP_REDIRECTION = #iisredirection
Property(C): BOOKMARK_SQL2008 = #SQL2008
Property(C): ARPPRODUCTICON = ProgramIcon
Property(C): ARPHELPLINK = http://www.telerik.com/
Property(C): ACTIVATION = bIAcLFxPdF3nGFq5rI0YkI2lYVCRFCYIYO7HXlgW/q9fbUQFCI5cdA==
Property(C): INSTALL_THIS_COMPONENT = no
Property(C): ShouldLaunchDemos = 1
Property(C): ShouldLaunchReadme = 1
Property(C): DefaultUIFont = Telerik_Font_MidSizeText
Property(C): ARPNOMODIFY = 1
Property(C): INSTALL_ENABLED_NEXT_BTN = 1
Property(C): UNINSTALL_ENABLED_NEXT_BTN = 1
Property(C): ErrorDialog = ErrorDlg
Property(C): SecureCustomProperties = BETADETECTED;NETSH;NEWERVERSIONDETECTED;PREVIOUSVERSIONDETECTED
Property(C): MsiHiddenProperties = CreateApplicationPool;CreateUser;DB_COLLATION;DB_PASSWORD;INSTALLERROR;INSTALLREDIRECTPAGE;MACHINEID;SERVER_CONNECTION_STRING;TEAMPULSE_CONNECTION_STRING
Property(C): MsiLogFileLocation = C:\teampulselog.txt
Property(C): PackageCode = {99765709-1FEF-4648-A08B-9B16F74CFA8D}
Property(C): ProductState = -1
Property(C): PackagecodeChanging = 1
Property(C): CURRENTDIRECTORY = C:\
Property(C): CLIENTUILEVEL = 0
Property(C): CLIENTPROCESSID = 3716
Property(C): VersionDatabase = 200
Property(C): VersionMsi = 4.05
Property(C): WindowsBuild = 6002
Property(C): ServicePackLevel = 2
Property(C): ServicePackLevelMinor = 0
Property(C): MsiNTProductType = 3
Property(C): WindowsFolder = C:\Windows\
Property(C): WindowsVolume = C:\
Property(C): SystemFolder = C:\Windows\system32\
Property(C): System16Folder = C:\Windows\system\
Property(C): RemoteAdminTS = 1
Property(C): TempFolder = C:\Users\ADMINI~1\AppData\Local\Temp\2\
Property(C): CommonFilesFolder = C:\Program Files\Common Files\
Property(C): AppDataFolder = C:\Users\Administrator\AppData\Roaming\
Property(C): FavoritesFolder = C:\Users\Administrator\Favorites\
Property(C): NetHoodFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts\
Property(C): PersonalFolder = C:\Users\Administrator\Documents\
Property(C): PrintHoodFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Printer Shortcuts\
Property(C): RecentFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent\
Property(C): SendToFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo\
Property(C): TemplateFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates\
Property(C): CommonAppDataFolder = C:\ProgramData\
Property(C): LocalAppDataFolder = C:\Users\Administrator\AppData\Local\
Property(C): MyPicturesFolder = C:\Users\Administrator\Pictures\
Property(C): AdminToolsFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools\
Property(C): StartupFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
Property(C): StartMenuFolder = C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\
Property(C): DesktopFolder = C:\Users\Administrator\Desktop\
Property(C): FontsFolder = C:\Windows\Fonts\
Property(C): GPTSupport = 1
Property(C): OLEAdvtSupport = 1
Property(C): ShellAdvtSupport = 1
Property(C): Intel = 6
Property(C): PhysicalMemory = 4060
Property(C): AdminUser = 1
Property(C): LogonUser = Administrator
Property(C): UserSID = S-1-5-21-1565970331-1841932326-737719383-500
Property(C): UserLanguageID = 6153
Property(C): ComputerName = BUMBLEBEE
Property(C): SystemLanguageID = 6153
Property(C): ScreenX = 1280
Property(C): ScreenY = 1024
Property(C): CaptionHeight = 19
Property(C): BorderTop = 1
Property(C): BorderSide = 1
Property(C): TextHeight = 16
Property(C): TextInternalLeading = 3
Property(C): ColorBits = 16
Property(C): TTCSupport = 1
Property(C): Time = 16:37:46
Property(C): Date = 26/11/2010
Property(C): MsiNetAssemblySupport = 4.0.30319.1
Property(C): MsiWin32AssemblySupport = 6.0.6001.18000
Property(C): RedirectedDllSupport = 2
Property(C): MsiRunningElevated = 1
Property(C): Privileged = 1
Property(C): WixUI_InstallMode = InstallComplete
Property(C): DATABASE = C:\Users\ADMINI~1\AppData\Local\Temp\2\27530f.msi
Property(C): OriginalDatabase = C:\Telerik_TeamPulse_CommunityEdition_Q3_2010.msi
Property(C): SOURCEDIR = C:\
Property(C): VersionHandler = 4.05
Property(C): UILevel = 5
Property(C): ACTION = INSTALL
Property(C): EXECUTEACTION = INSTALL
Property(C): ROOTDRIVE = C:\
Property(C): CostingComplete = 1
Property(C): OutOfDiskSpace = 0
Property(C): OutOfNoRbDiskSpace = 0
Property(C): PrimaryVolumeSpaceAvailable = 0
Property(C): PrimaryVolumeSpaceRequired = 0
Property(C): PrimaryVolumeSpaceRemaining = 0
Property(C): INSTALLLEVEL = 1000
Property(C): MACHINEID = **********
=== Logging stopped: 26/11/2010  16:37:46 ===
MSI (c) (84:D0) [16:37:46:053]: Note: 1: 1708
MSI (c) (84:D0) [16:37:46:054]: Product: Telerik TeamPulse -- Installation failed.
 
MSI (c) (84:D0) [16:37:46:055]: Windows Installer installed the product. Product Name: Telerik TeamPulse. Product Version: 103.11.17.0. Product Language: 1033. Installation success or error status: 1603.
 
MSI (c) (84:D0) [16:37:46:057]: Grabbed execution mutex.
MSI (c) (84:D0) [16:37:46:057]: Cleaning up uninstalled install packages, if any exist
MSI (c) (84:D0) [16:37:46:058]: MainEngineThread is returning 1603
=== Verbose logging stopped: 26/11/2010  16:37:46 ===


0
Robert Régnier
Telerik team
answered on 26 Nov 2010, 08:46 PM
Hello Derek,

The best next step in order to move you back towards a functional TeamPulse installation would be to restore your backup and attempt the update once again.  Now that the sql scripts are successfully being executed against your database, the upgrade should continue on normally from a functioning database.

Let us know how things go and don't hesitate to contact us if you need anything else.

Greetings,
Robert Régnier
the Telerik team
New release coming up this week! Sign up to see what's new in Telerik TeamPulse Q3 2010!
Thursday, November 18, 2010 2:00 PM - 3:00 PM EST: Register today!
Tags
General Discussions
Asked by
Derek
Top achievements
Rank 1
Answers by
David Harris
Telerik team
Derek
Top achievements
Rank 1
Robert Régnier
Telerik team
Share this question
or