Guest User

Untitled

a guest
Dec 14th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.43 KB | None | 0 0
  1. IF OBJECT_ID('SP_GERA_UPDATE') IS NOT NULL
  2.     DROP PROCEDURE SP_GERA_UPDATE;
  3. GO
  4.  CREATE PROCEDURE SP_GERA_UPDATE(@TABLE VARCHAR(32))AS
  5.  DECLARE @ARGS NVARCHAR(MAX),
  6.         @VALUES NVARCHAR(MAX),
  7.         @LENGTH NVARCHAR(MAX),
  8.         @SQL NVARCHAR(MAX),
  9.         @COLUMN_NAME NVARCHAR(32),
  10.         @DATA_TYPE NVARCHAR(32),
  11.         @PK_IDENTITY NVARCHAR(32), -- CHAVE PRIMARIA DA TABELA
  12.         @MSG nVARCHAR(150)
  13.  
  14.         -- CASO A TABELA NÃO EXISTA É MANDADO UM ERRO COM A MENSAGEM:
  15.         IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES TAB WHERE TAB.TABLE_NAME = @TABLE)
  16.         BEGIN
  17.         SET @MSG = (SELECT T.TEXT FROM typeError T WHERE T.id = 1)
  18.         INSERT INTO error(errorId) VALUES(1)
  19.         RAISERROR(@MSG,1,4)
  20.         RETURN;
  21.         END
  22.  
  23. DECLARE CT CURSOR FOR
  24.     SELECT COLUMN_NAME, DATA_TYPE,CHARACTER_MAXIMUM_LENGTH
  25.     FROM INFORMATION_SCHEMA.COLUMNS
  26.     WHERE TABLE_NAME = @TABLE
  27.     ORDER BY ORDINAL_POSITION
  28. BEGIN
  29.     SET @ARGS = ''
  30.     SET @LENGTH = ''
  31.     SET @SQL = ''
  32.     SET @PK_IDENTITY = (SELECT COLUNA FROM ALL_PRIMARY_KEY_COLUMNS WHERE TABELA = @TABLE)--NOME DA CHAVE PRIMARIA
  33.  
  34.     OPEN CT
  35.     FETCH CT INTO @COLUMN_NAME,@DATA_TYPE,@LENGTH
  36.     WHILE(@@FETCH_STATUS = 0)
  37.     BEGIN
  38.         IF NOT EXISTS(SELECT * FROM All_Primary_Key_Columns WHERE TABELA = @TABLE AND COLUNA = @COLUMN_NAME)
  39.         BEGIN
  40.             SET @ARGS = '@' +@COLUMN_NAME + ' ' + @DATA_TYPE
  41.             IF(@LENGTH = '-1')-- PARA O VARBINARY (MAX), EM QUE O MAX FICA A -1 QUANDO É FEITO O FETCH
  42.             BEGIN
  43.                 SET @LENGTH = 'MAX'
  44.             END
  45.             IF(@LENGTH IS NOT NULL) BEGIN
  46.                 SET @ARGS += '(' + @LENGTH + ')'
  47.             END
  48.             SET @SQL = 'CREATE PROCEDURE sp_'+ @TABLE + '_' +@COLUMN_NAME +'_update('+ @args+',@PRIMARYKEYID BIGINT)AS
  49.             BEGIN
  50.                 IF NOT EXISTS(SELECT * FROM ' + @TABLE + ' WHERE ' +@PK_IDENTITY+' = @PRIMARYKEYID)
  51.                 BEGIN
  52.                     INSERT INTO ERROR(ERRORID) VALUES (4);
  53.                     THROW 51000, '''+(SELECT CONCAT('ERRO ',T.id, ' - ', T.TEXT) FROM typeError T WHERE T.id = 4) +''',1;
  54.                 END
  55.                
  56.                 IF EXISTS(SELECT * FROM ALL_FOREIGN_KEY_COLUMNS WHERE TABELA = ''' + @TABLE + ''' AND COLUNA = '''+ @COLUMN_NAME + ''')
  57.                 BEGIN
  58.                     INSERT INTO ERROR(ERRORID) VALUES(5);
  59.                     THROW 51000, '''+(SELECT CONCAT('ERRO ',T.id, ' - ', T.TEXT) FROM typeError T WHERE T.id = 5) +''',1;
  60.                 END
  61.                
  62.                 UPDATE '+ @TABLE + '
  63.                 SET ' + @COLUMN_NAME + ' =  @'+@COLUMN_NAME+'
  64.                 WHERE '+ @PK_IDENTITY +' = @PRIMARYKEYID
  65.             END
  66.             '
  67.             EXEC SP_EXECUTESQL @SQL
  68.  
  69.             PRINT @SQL
  70.         END
  71.         FETCH CT INTO @COLUMN_NAME,@DATA_TYPE,@LENGTH
  72.     END
  73.     CLOSE CT; DEALLOCATE CT
  74. END
  75. GO
Advertisement
Add Comment
Please, Sign In to add comment