BEGIN TRANSACTION BEGIN TRY DECLARE @TableName VARCHAR(100), @Prefix NVARCHAR(10), @ColumnName NVARCHAR(128), @lst_TableName_Select NVARCHAR(MAX) = '', @lst_TableName_Not_Select NVARCHAR(MAX) = '', @lst_TableName_Fail NVARCHAR(MAX) = '', @NEW_LINE CHAR(4) = CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) DECLARE Detail CURSOR FOR SELECT SP.ID, SP.Prefix, KCU.COLUMN_NAME FROM dbo.SYS_PREFIX SP LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU ON KCU.TABLE_NAME = SP.ID WHERE ID NOT IN (SELECT A.TABLE_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE A LEFT JOIN INFORMATION_SCHEMA.TABLES B ON A.TABLE_NAME = B.TABLE_NAME WHERE OBJECTPROPERTY(OBJECT_ID(A.CONSTRAINT_SCHEMA + '.' + QUOTENAME(A.CONSTRAINT_NAME)), 'IsPrimaryKey') = 1 GROUP BY A.TABLE_NAME HAVING COUNT(A.COLUMN_NAME) > 1) AND OBJECTPROPERTY(OBJECT_ID(KCU.CONSTRAINT_SCHEMA + '.' + QUOTENAME(KCU.CONSTRAINT_NAME)), 'IsPrimaryKey') = 1 OPEN Detail FETCH NEXT FROM Detail INTO @TableName,@Prefix,@ColumnName WHILE @@FETCH_STATUS = 0 BEGIN DECLARE @sql NVARCHAR(MAX), @TableName_Fail VARCHAR(100) SET @sql = ' DECLARE @VALUE VARCHAR(25) = NULL -- SELECT TOP 1 @VALUE = '+@ColumnName+' FROM '+@TableName+' WHERE 1=1 AND REPLACE('+@ColumnName+','''+@Prefix+''','''') NOT LIKE ''%[^0-9]%'' ORDER BY CAST(REPLACE('+@ColumnName+','''+@Prefix+''','''') AS NUMERIC) DESC -- IF(NOT EXISTS(SELECT 1 FROM SYS_CODEMASTERS WHERE Prefix = '''+@Prefix+''')) BEGIN INSERT INTO SYS_CODEMASTERS (Prefix,CurValue,[Description],Active) VALUES('''+@Prefix+''',0,'''',1) END -- IF (@VALUE IS NOT NULL OR (@VALUE IS NULL AND NOT EXISTS (SELECT TOP 1 * FROM '+@TableName+'))) BEGIN UPDATE SYS_CODEMASTERS SET CurValue=(SELECT REPLACE(ISNULL(@VALUE,0),'''+@Prefix+''','''')) WHERE Prefix='''+@Prefix+''' -- SET @TableName_Fail = '''' END ELSE BEGIN SET @TableName_Fail = '''+@TableName+''' END ' EXEC sp_executesql @sql, N'@TableName_Fail VARCHAR(100) OUT', @TableName_Fail OUT IF @TableName_Fail <> '' BEGIN SET @lst_TableName_Fail = CONCAT(@lst_TableName_Fail, ', ', @TableName_Fail) END SET @lst_TableName_Select = CONCAT(@lst_TableName_Select, ',', '''', @TableName, '''') FETCH NEXT FROM Detail INTO @TableName,@Prefix,@ColumnName END -- SET @lst_TableName_Select = STUFF(@lst_TableName_Select,1,1,'') SELECT @lst_TableName_Not_Select = STUFF((SELECT ', ' + ID FROM dbo.SYS_PREFIX WHERE CHARINDEX('''' + ID + '''', @lst_TableName_Select) = 0 FOR XML PATH(''), TYPE).value('.[1]', 'NVARCHAR(MAX)'),1,2,'') -- PRINT CONCAT(@NEW_LINE, 'SUCCESS', @NEW_LINE) PRINT CONCAT('Table not select: ', @lst_TableName_Not_Select, @NEW_LINE) PRINT CONCAT('Skip table when selecting: ', STUFF(@lst_TableName_Fail,1,2,'')) -- CLOSE Detail DEALLOCATE Detail IF(@@TRANCOUNT > 0) BEGIN COMMIT TRANSACTION END END TRY BEGIN CATCH PRINT 'ERROR' PRINT 'ERROR_MESSAGE: ' + ERROR_MESSAGE() PRINT 'LINE: ' + CAST(ERROR_LINE() AS NVARCHAR) -- IF(CURSOR_STATUS('global','Detail') >= -1) BEGIN IF(CURSOR_STATUS('global', 'Detail') > -1) CLOSE Detail DEALLOCATE Detail END IF(@@TRANCOUNT > 0) BEGIN ROLLBACK TRANSACTION END END CATCH