DECLARE @sql NVARCHAR (MAX) DECLARE @dbName NVARCHAR(255); DECLARE @userName NVARCHAR(128); DECLARE @metasql NVARCHAR (MAX) DECLARE db_cursor CURSOR FOR SELECT name FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb') AND state_desc = 'ONLINE'; OPEN db_cursor; FETCH NEXT FROM db_cursor INTO @dbName; WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = N'IF EXISTS (SELECT * FROM sys.objects WHERE [type] IN (N''P'', N''PC'') AND OBJECT_ID = OBJECT_ID(N''[Common].[NewContractorAsXML]'')) DROP PROCEDURE [Common].[NewContractorAsXML];' SET @metasql = 'USE ['+@dbName+'] EXEC (''' + REPLACE(@sql, '''', '''''') + ''')' EXEC (@metasql) SET @sql =N' CREATE PROCEDURE [Common].[NewContractorAsXML] (@catalogId INT, @kindId INT, @contractorData XML, @moduleCode NVARCHAR(255), @userid int) AS BEGIN BEGIN TRY IF 0 = ISNULL(@catalogId, 0) SET @catalogId = 2100; IF 0 = ISNULL(@kindId, 0) SELECT @kindId = e.ElementId FROM HM.KH k JOIN SSCommon.STElements e on e.ElementId = k.kod WHERE k.id = 3100; DECLARE @TYPcnUPUSTKH INT = 15; DECLARE @znacznikiKH INT = 0; SELECT @znacznikiKH = [ElementKindId] FROM [SSCommon].[STElementKinds] WHERE [Guid]=''4EFBA075-F67F-427A-BB3A-F98CEAF63101''; DECLARE @changes TABLE ( [PostalCode] NVARCHAR(10) COLLATE database_default, [Place] NVARCHAR(50) COLLATE database_default, [Province] NVARCHAR(50) COLLATE database_default, [Country] NVARCHAR(50) COLLATE database_default, [PaymentFormId] INT, [PayRegistryId] INT, [SaleKindId] INT, [PriceTypeId] INT, [AccountantParameter] NVARCHAR(20) COLLATE database_default, [IsLimitActive] NVARCHAR(6) COLLATE database_default, [LimitCurrency] NVARCHAR(20) COLLATE database_default, [LimitValue] FLOAT, [PriceNegotiation] NVARCHAR(6) COLLATE database_default, [DiscountPercent] FLOAT, [CatalogId] INT, [ContractorKindId] INT, [MarkerId] INT ); DECLARE @selectChanges NVARCHAR(MAX), @selectStatement NVARCHAR(MAX), @selectChanges1 NVARCHAR(MAX), @selectChanges2 NVARCHAR(MAX), @selectChanges3 NVARCHAR(MAX), @selectChanges4 NVARCHAR(MAX), @selectChanges5 NVARCHAR(MAX) SET @selectChanges1='' ISNULL(k.[kodpocz],'''') AS [PostalCode], ISNULL(k.[miejscowosc],'''') AS [Place], ISNULL(k.[rejon],'''') AS [Province], ISNULL((SELECT [Shortcut] FROM SSCommon.[STElements] WHERE [ElementId] = k.[idKraju]), '''') AS [Country], ISNULL(k.[formaplatn],0) AS [PaymentFormId], ISNULL(k.[plattyp],0) AS [PayRegistryId], (CASE k.[grupacen] WHEN 0 THEN 1 WHEN 1 THEN 2 ELSE 0 END) AS [SaleKindId], ISNULL(k.[typceny],0) AS [PriceTypeId], ISNULL(k.[typks],'''') AS [AccountantParameter], IIF(k.[limit] = 0, ''''false'''', ''''true'''') AS [IsLimitActive], ISNULL(k.[limitwaluta],'''') AS [LimitCurrency], CAST(ISNULL(k.[limitkwota],0) AS MONEY) AS [LimitValue], IIF(k.[negoc] = 0, ''''false'''', ''''true'''') AS [PriceNegotiation], CAST(ISNULL((SELECT c.[cena] FROM [HM].[CN] c WHERE c.[idpd] = k.[kod] and c.[typpd] = 1 and c.[typ] ='' SET @selectChanges2= ''), 0) AS MONEY) AS [DiscountPercent],'' SET @selectChanges3= '' AS [CatalogId],'' SET @selectChanges4= '' AS [ContractorKindId], (SELECT [ElementId] FROM [SSCommon].[STElements] WHERE [ElementKindId] ='' SET @selectChanges5= '' AND [Shortcut] = CAST(ISNULL(k.[znacznik],0) AS NVARCHAR(100))) AS [MarkerId] FROM [HM].[KH] k '' SET @selectChanges = CONCAT (@selectChanges1 ,@TYPcnUPUSTKH,@selectChanges2,@catalogId,@selectChanges3,@kindId,@selectChanges4,@znacznikiKH,@selectChanges5) SET @selectStatement = CONCAT (''SELECT'', @selectChanges, ''WHERE k.[typ] = 110 AND k.[kod] ='', @kindId) INSERT INTO @changes EXEC(@selectStatement) IF 0 = (SELECT COUNT(*) FROM @changes) BEGIN SET @selectStatement = CONCAT (''SELECT TOP(1)'', @selectChanges, ''INNER JOIN [SSCommon].[STElements] el ON [ElementId] ='', @kindId, '' INNER JOIN [SSCommon].[STElementKinds] ek ON ek.ElementKindId = el.ElementKindId WHERE k.[typ] = 110 AND ek.Guid = ''''0CE26851-5729-4533-99B0-37E08B06D68B'''''') INSERT INTO @changes EXEC(@selectStatement) END DECLARE @x TABLE ([value] xml); INSERT INTO @x VALUES (@contractorData); IF 1 = (SELECT COUNT(*) FROM @changes) BEGIN if (SELECT [PostalCode] FROM @changes) <> '''' BEGIN UPDATE @x SET value.modify(''delete /Contractor/MainAddress/PostalCode''); UPDATE @x SET value.modify(''insert {sql:column("PostalCode")} as first into (/Contractor/MainAddress)[1]'') FROM @changes; END if (SELECT [Place] FROM @changes) <> '''' BEGIN UPDATE @x SET value.modify(''delete /Contractor/MainAddress/Place''); UPDATE @x SET value.modify(''insert {sql:column("Place")} as first into (/Contractor/MainAddress)[1]'') FROM @changes; END if (SELECT [Province] FROM @changes) <> '''' BEGIN UPDATE @x SET value.modify(''delete /Contractor/MainAddress/Province''); UPDATE @x SET value.modify(''insert {sql:column("Province")} as first into (/Contractor/MainAddress)[1]'') FROM @changes; END if (SELECT [Country] FROM @changes) <> '''' BEGIN UPDATE @x SET value.modify(''delete /Contractor/MainAddress/Country''); UPDATE @x SET value.modify(''insert {sql:column("Country")} as first into (/Contractor/MainAddress)[1]'') FROM @changes; END if (SELECT [PaymentFormId] FROM @changes) <> 0 BEGIN UPDATE @x SET value.modify(''delete /Contractor/PaymentFormId''); UPDATE @x SET value.modify(''insert {sql:column("PaymentFormId")} as first into (/Contractor)[1]'') FROM @changes; DECLARE @days INT SET @days = ISNULL((SELECT [long] FROM [HM].[PaymentForm] pf WHERE pf.id = (SELECT [PaymentFormId] FROM @changes)), 0) UPDATE @x SET value.modify(''delete /Contractor/PaymentFormDeadline''); UPDATE @x SET value.modify(''insert {sql:variable("@days")} as first into (/Contractor)[1]''); END if (SELECT [PayRegistryId] FROM @changes) <> 0 BEGIN UPDATE @x SET value.modify(''delete /Contractor/PayRegistryId''); UPDATE @x SET value.modify(''insert {sql:column("PayRegistryId")} as first into (/Contractor)[1]'') FROM @changes; END if (SELECT [SaleKindId] FROM @changes) <> 0 BEGIN UPDATE @x SET value.modify(''delete /Contractor/SaleKindId''); UPDATE @x SET value.modify(''insert {sql:column("SaleKindId")} as first into (/Contractor)[1]'') FROM @changes; END if (SELECT [PriceTypeId] FROM @changes) <> 0 BEGIN UPDATE @x SET value.modify(''delete /Contractor/PriceTypeId''); UPDATE @x SET value.modify(''insert {sql:column("PriceTypeId")} as first into (/Contractor)[1]'') FROM @changes; END if (SELECT [AccountantParameter] FROM @changes) <> '''' BEGIN UPDATE @x SET value.modify(''delete /Contractor/AccountantParameter''); UPDATE @x SET value.modify(''insert {sql:column("AccountantParameter")} as first into (/Contractor)[1]'') FROM @changes; END if (SELECT [IsLimitActive] FROM @changes) <> ''false'' BEGIN UPDATE @x SET value.modify(''delete /Contractor/IsLimitActive''); UPDATE @x SET value.modify(''insert {sql:column("IsLimitActive")} as first into (/Contractor)[1]'') FROM @changes; END if (SELECT [LimitCurrency] FROM @changes) <> '''' BEGIN UPDATE @x SET value.modify(''delete /Contractor/LimitCurrency''); UPDATE @x SET value.modify(''insert {sql:column("LimitCurrency")} as first into (/Contractor)[1]'') FROM @changes; END IF (SELECT [LimitValue] FROM @changes) <> 0 BEGIN UPDATE @x SET value.modify(''delete /Contractor/LimitValue''); UPDATE @x SET value.modify(''insert {sql:column("LimitValue")} as first into (/Contractor)[1]'') FROM @changes; END IF (SELECT [PriceNegotiation] FROM @changes) <> ''false'' BEGIN UPDATE @x SET value.modify(''delete /Contractor/PriceNegotiation''); UPDATE @x SET value.modify(''insert {sql:column("PriceNegotiation")} as first into (/Contractor)[1]'') FROM @changes; END IF (SELECT [DiscountPercent] FROM @changes) <> 0 BEGIN UPDATE @x SET value.modify(''delete /Contractor/DiscountPercent''); UPDATE @x SET value.modify(''insert {sql:column("DiscountPercent")} as first into (/Contractor)[1]'') FROM @changes; END IF (SELECT [CatalogId] FROM @changes) <> 0 BEGIN UPDATE @x SET value.modify(''delete /Contractor/CatalogId''); UPDATE @x SET value.modify(''insert {sql:column("CatalogId")} as first into (/Contractor)[1]'') FROM @changes; END IF (SELECT [ContractorKindId] FROM @changes) <> 0 BEGIN UPDATE @x SET value.modify(''delete /Contractor/ContractorKindId''); UPDATE @x SET value.modify(''insert {sql:column("ContractorKindId")} as first into (/Contractor)[1]'') FROM @changes; END IF (SELECT [MarkerId] FROM @changes) <> 0 BEGIN UPDATE @x SET value.modify(''delete /Contractor/MarkerId''); UPDATE @x SET value.modify(''insert {sql:column("MarkerId")} as first into (/Contractor)[1]'') FROM @changes; END END DECLARE @RightsKHElementID INT, @guidElement UNIQUEIDENTIFIER; SELECT @RightsKHElementID=ElementKindId FROM SSCommon.STDictionaries WHERE guid=''DEBA7687-E550-4CBC-9FE9-8175984F1AD4'' SELECT @guidElement = elem.Guid FROM HM.ZZ zz INNER JOIN SSCommon.STElements elem ON elem.ElementId = zz.id2 WHERE typ = 204 AND id1 = @userid UPDATE @x SET value.modify(''delete /Contractor/ContractorsGroupPermissions''); DECLARE @STUserRightsGroupsXML XML; SET @STUserRightsGroupsXML=( SELECT CASE WHEN elementy.Guid=@guidElement THEN ''true'' ELSE ''false'' END AS HasRight ,Shortcut AS Name, ElementId from SSCommon.STUserRightsGroups urg INNER JOIN SSCommon.STElements elementy ON elementy.ElementId=urg.ContractorRightGroup WHERE elementy.ElementKindId=@RightsKHElementID AND urg.UserId=@userid FOR XML PATH(''ContractorsGroupPermission''), ROOT(''ContractorsGroupPermissions'') ) UPDATE @x SET value.modify(''insert (sql:variable("@STUserRightsGroupsXML")) as last into (/Contractor)[1]'') select [value].query(''/Contractor'') from @x FOR XML PATH(''''); END TRY BEGIN CATCH THROW; END CATCH END' SET @metasql = 'USE ['+@dbName+'] EXEC (''' + REPLACE(@sql, '''', '''''') + ''')' EXEC (@metasql) FETCH NEXT FROM db_cursor INTO @dbName; END; CLOSE db_cursor; DEALLOCATE db_cursor;