Created
August 31, 2018 13:43
-
-
Save allansli/d0e278248752846e86e3fddbd7fd654c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DECLARE @QUERY_SELECT VARCHAR(MAX); | |
DECLARE @NOME_TABELA VARCHAR(MAX); | |
DECLARE @NOME_COLUNA VARCHAR(MAX); | |
DECLARE @VALOR_COLUNA VARCHAR(MAX); | |
DECLARE @QUERY_WHERE VARCHAR(MAX); | |
DECLARE @COLUNA_CHAVE VARCHAR(1); | |
DECLARE @COLUNA_EDITAVEL VARCHAR(1); | |
DECLARE @TIPO_COLUNA VARCHAR(MAX); | |
DECLARE @TEM_FILTRO BIT; | |
DECLARE @VALOR_NUMERICO VARCHAR(MAX); | |
IF (@TIPO_EXEC = 1) --SELECT | |
BEGIN | |
SET @QUERY_SELECT = 'SELECT TOP 100 '; | |
SET @QUERY_WHERE = ' WHERE '; | |
SET @TEM_FILTRO = 0; | |
DECLARE XML_CURSOR CURSOR FAST_FORWARD FOR | |
SELECT NOME_TABELA = T.Item.value('../../@NOME', 'varchar(MAX)'), | |
NOME_COLUNA = T.Item.value('../@NOME' , 'varchar(MAX)'), | |
VALOR_COLUNA = T.Item.value('../@VALOR' , 'varchar(MAX)'), | |
COLUNA_EDITAVEL = T.Item.value('../@EDITAVEL' , 'varchar(MAX)'), | |
COLUNA_CHAVE = T.Item.value('../@CHAVE_PRIMARIA' , 'varchar(MAX)'), | |
TIPO_COLUNA = T.Item.value('@TIPO' , 'varchar(MAX)') | |
FROM @XML_INPUT.nodes('//TABELA/COLUNA/TIPO') AS T(Item); | |
OPEN XML_CURSOR; | |
FETCH NEXT FROM XML_CURSOR | |
INTO | |
@NOME_TABELA, @NOME_COLUNA, @VALOR_COLUNA, @COLUNA_EDITAVEL, @COLUNA_CHAVE, @TIPO_COLUNA; | |
WHILE @@FETCH_STATUS = 0 | |
BEGIN | |
SET @QUERY_SELECT = @QUERY_SELECT + @NOME_COLUNA + ', ' | |
IF(@TIPO_COLUNA <> 'xml' AND @VALOR_COLUNA <> '') | |
BEGIN | |
SET @QUERY_WHERE = @QUERY_WHERE + @NOME_COLUNA + ' = ''' + @VALOR_COLUNA + ''' AND ' | |
SET @TEM_FILTRO = 1 | |
END | |
FETCH NEXT FROM XML_CURSOR | |
INTO | |
@NOME_TABELA, @NOME_COLUNA, @VALOR_COLUNA, @COLUNA_EDITAVEL, @COLUNA_CHAVE, @TIPO_COLUNA; | |
END; | |
CLOSE XML_CURSOR; | |
DEALLOCATE XML_CURSOR; | |
SELECT @QUERY_SELECT = LEFT(@QUERY_SELECT, LEN(@QUERY_SELECT) - 1); | |
SET @QUERY_SELECT = @QUERY_SELECT + ' FROM ' + @NOME_TABELA + ' WITH (NOLOCK)'; | |
IF (@TEM_FILTRO = 1) | |
BEGIN | |
SELECT @QUERY_WHERE = LEFT(@QUERY_WHERE, len(@QUERY_WHERE) - 4); | |
SET @QUERY_SELECT = @QUERY_SELECT + @QUERY_WHERE | |
END | |
EXEC(@QUERY_SELECT); | |
--PRINT @QUERY_SELECT | |
END | |
ELSE IF (@TIPO_EXEC = 2) --INSERT | |
BEGIN | |
DECLARE @QUERY_INSERT VARCHAR(MAX) | |
DECLARE @QUERY_INSERT_1 VARCHAR(MAX) | |
DECLARE @QUERY_INSERT_2 VARCHAR(MAX) | |
DECLARE @QUERY_INSERT_3 VARCHAR(MAX) | |
SET @QUERY_INSERT_1 = 'INSERT INTO ' | |
SET @QUERY_INSERT_2 = ' (' | |
SET @QUERY_INSERT_3 = ' VALUES (' | |
DECLARE XML_CURSOR CURSOR FAST_FORWARD FOR | |
SELECT NOME_TABELA = T.Item.value('../../@NOME', 'varchar(MAX)'), | |
NOME_COLUNA = T.Item.value('../@NOME' , 'varchar(MAX)'), | |
VALOR_COLUNA = T.Item.value('../@VALOR' , 'varchar(MAX)'), | |
COLUNA_EDITAVEL = T.Item.value('../@EDITAVEL' , 'varchar(MAX)'), | |
COLUNA_CHAVE = T.Item.value('../@CHAVE_PRIMARIA' , 'varchar(MAX)'), | |
TIPO_COLUNA = T.Item.value('@TIPO' , 'varchar(MAX)') | |
FROM @XML_INPUT.nodes('//TABELA/COLUNA/TIPO') AS T(Item); | |
OPEN XML_CURSOR; | |
FETCH NEXT FROM XML_CURSOR | |
INTO | |
@NOME_TABELA, @NOME_COLUNA, @VALOR_COLUNA, @COLUNA_EDITAVEL, @COLUNA_CHAVE, @TIPO_COLUNA; | |
WHILE @@FETCH_STATUS = 0 | |
BEGIN | |
IF(@TIPO_COLUNA <> 'timestamp') | |
BEGIN | |
IF (LTRIM(RTRIM(@VALOR_COLUNA)) = '') | |
BEGIN | |
SET @VALOR_NUMERICO = 'NULL' | |
END | |
ELSE | |
BEGIN | |
SET @VALOR_NUMERICO = @VALOR_COLUNA | |
END | |
IF(@COLUNA_EDITAVEL = 'S') | |
BEGIN | |
SET @QUERY_INSERT_2 = @QUERY_INSERT_2 + @NOME_COLUNA + ', ' | |
IF((@TIPO_COLUNA = 'int' OR @TIPO_COLUNA = 'decimal')) | |
BEGIN | |
SET @QUERY_INSERT_3 = @QUERY_INSERT_3 + @VALOR_NUMERICO + ', ' | |
END | |
ELSE | |
BEGIN | |
SET @QUERY_INSERT_3 = @QUERY_INSERT_3 + '''' + @VALOR_COLUNA + '''' + ', ' | |
END | |
END | |
END | |
FETCH NEXT FROM XML_CURSOR | |
INTO | |
@NOME_TABELA, @NOME_COLUNA, @VALOR_COLUNA, @COLUNA_EDITAVEL, @COLUNA_CHAVE, @TIPO_COLUNA; | |
END; | |
CLOSE XML_CURSOR; | |
DEALLOCATE XML_CURSOR; | |
SELECT @QUERY_INSERT_2 = LEFT(@QUERY_INSERT_2, LEN(@QUERY_INSERT_2) - 1) | |
SELECT @QUERY_INSERT_3 = LEFT(@QUERY_INSERT_3, LEN(@QUERY_INSERT_3) - 1) | |
SET @QUERY_INSERT_2 = @QUERY_INSERT_2 + ')' | |
SET @QUERY_INSERT_1 = @QUERY_INSERT_1 + @NOME_TABELA | |
SET @QUERY_INSERT_3 = @QUERY_INSERT_3 + ')' | |
SET @QUERY_INSERT = @QUERY_INSERT_1 + @QUERY_INSERT_2 + @QUERY_INSERT_3 | |
EXEC(@QUERY_INSERT) | |
--PRINT @QUERY_INSERT | |
END | |
ELSE IF (@TIPO_EXEC = 3) --DELETE | |
BEGIN | |
DECLARE @QUERY_DELETE VARCHAR(MAX) | |
DECLARE @QUERY_DELETE_1 VARCHAR(MAX) | |
DECLARE @QUERY_DELETE_2 VARCHAR(MAX) | |
SET @QUERY_DELETE_1 = 'DELETE FROM ' | |
SET @QUERY_DELETE_2 = ' WHERE ' | |
DECLARE XML_CURSOR CURSOR FAST_FORWARD FOR | |
SELECT NOME_TABELA = T.Item.value('../../@NOME', 'varchar(MAX)'), | |
NOME_COLUNA = T.Item.value('../@NOME' , 'varchar(MAX)'), | |
VALOR_COLUNA = T.Item.value('../@VALOR' , 'varchar(MAX)'), | |
COLUNA_EDITAVEL = T.Item.value('../@EDITAVEL' , 'varchar(MAX)'), | |
COLUNA_CHAVE = T.Item.value('../@CHAVE_PRIMARIA' , 'varchar(MAX)'), | |
TIPO_COLUNA = T.Item.value('@TIPO' , 'varchar(MAX)') | |
FROM @XML_INPUT.nodes('//TABELA/COLUNA/TIPO') AS T(Item); | |
OPEN XML_CURSOR; | |
FETCH NEXT FROM XML_CURSOR | |
INTO | |
@NOME_TABELA, @NOME_COLUNA, @VALOR_COLUNA, @COLUNA_EDITAVEL, @COLUNA_CHAVE, @TIPO_COLUNA; | |
WHILE @@FETCH_STATUS = 0 | |
BEGIN | |
IF (LTRIM(RTRIM(@VALOR_COLUNA)) = '') | |
BEGIN | |
SET @VALOR_NUMERICO = 'NULL' | |
END | |
ELSE | |
BEGIN | |
SET @VALOR_NUMERICO = @VALOR_COLUNA | |
END | |
IF(@COLUNA_EDITAVEL = 'N' OR @COLUNA_CHAVE = 'S') | |
BEGIN | |
IF((@TIPO_COLUNA = 'int' OR @TIPO_COLUNA = 'decimal')) | |
BEGIN | |
SET @QUERY_DELETE_2 = @QUERY_DELETE_2 + @NOME_COLUNA + ' = ' + @VALOR_NUMERICO + ' AND ' | |
END | |
ELSE | |
BEGIN | |
SET @QUERY_DELETE_2 = @QUERY_DELETE_2 + @NOME_COLUNA + ' = ' + '''' + @VALOR_COLUNA + '''' + ' AND ' | |
END | |
END | |
FETCH NEXT FROM XML_CURSOR | |
INTO | |
@NOME_TABELA, @NOME_COLUNA, @VALOR_COLUNA, @COLUNA_EDITAVEL, @COLUNA_CHAVE, @TIPO_COLUNA; | |
END; | |
CLOSE XML_CURSOR; | |
DEALLOCATE XML_CURSOR; | |
SELECT @QUERY_DELETE_2 = LEFT(@QUERY_DELETE_2, LEN(@QUERY_DELETE_2) - 4) | |
SET @QUERY_DELETE_1 = @QUERY_DELETE_1 + @NOME_TABELA | |
SET @QUERY_DELETE = @QUERY_DELETE_1 + @QUERY_DELETE_2 | |
EXEC(@QUERY_DELETE) | |
--PRINT @QUERY_DELETE | |
END | |
ELSE IF (@TIPO_EXEC = 4) --UPDATE | |
BEGIN | |
DECLARE @QUERY_UPDATE VARCHAR(MAX) | |
DECLARE @QUERY_UPDATE_1 VARCHAR(MAX) | |
DECLARE @QUERY_UPDATE_2 VARCHAR(MAX) | |
DECLARE @QUERY_UPDATE_3 VARCHAR(MAX) | |
SET @QUERY_UPDATE_1 = 'UPDATE ' | |
SET @QUERY_UPDATE_2 = ' SET ' | |
SET @QUERY_UPDATE_3 = ' WHERE ' | |
SET @TEM_FILTRO = 0 | |
DECLARE XML_CURSOR CURSOR FAST_FORWARD FOR | |
SELECT NOME_TABELA = T.Item.value('../../@NOME', 'varchar(MAX)'), | |
NOME_COLUNA = T.Item.value('../@NOME' , 'varchar(MAX)'), | |
VALOR_COLUNA = T.Item.value('../@VALOR' , 'varchar(MAX)'), | |
COLUNA_EDITAVEL = T.Item.value('../@EDITAVEL' , 'varchar(MAX)'), | |
COLUNA_CHAVE = T.Item.value('../@CHAVE_PRIMARIA' , 'varchar(MAX)'), | |
TIPO_COLUNA = T.Item.value('@TIPO' , 'varchar(MAX)') | |
FROM @XML_INPUT.nodes('//TABELA/COLUNA/TIPO') AS T(Item); | |
OPEN XML_CURSOR; | |
FETCH NEXT FROM XML_CURSOR | |
INTO | |
@NOME_TABELA, @NOME_COLUNA, @VALOR_COLUNA, @COLUNA_EDITAVEL, @COLUNA_CHAVE, @TIPO_COLUNA; | |
WHILE @@FETCH_STATUS = 0 | |
BEGIN | |
IF(@TIPO_COLUNA <> 'timestamp') | |
BEGIN | |
IF (LTRIM(RTRIM(@VALOR_COLUNA)) = '') | |
BEGIN | |
SET @VALOR_NUMERICO = 'NULL' | |
END | |
ELSE | |
BEGIN | |
SET @VALOR_NUMERICO = @VALOR_COLUNA | |
END | |
IF(@COLUNA_EDITAVEL = 'S' AND @COLUNA_CHAVE = 'N') | |
BEGIN | |
IF((@TIPO_COLUNA = 'int' OR @TIPO_COLUNA = 'decimal')) | |
BEGIN | |
SET @QUERY_UPDATE_2 = @QUERY_UPDATE_2 + @NOME_COLUNA + ' = ' + @VALOR_NUMERICO + ', ' | |
END | |
ELSE | |
BEGIN | |
SET @QUERY_UPDATE_2 = @QUERY_UPDATE_2 + @NOME_COLUNA + ' = ' + '''' + @VALOR_COLUNA + '''' + ', ' | |
END | |
END | |
ELSE | |
BEGIN | |
IF((@TIPO_COLUNA = 'int' OR @TIPO_COLUNA = 'decimal')) | |
BEGIN | |
SET @QUERY_UPDATE_3 = @QUERY_UPDATE_3 + @NOME_COLUNA + ' = ' + @VALOR_COLUNA + ' AND ' | |
END | |
ELSE | |
BEGIN | |
SET @QUERY_UPDATE_3 = @QUERY_UPDATE_3 + @NOME_COLUNA + ' = ' + '''' + @VALOR_COLUNA + '''' + ' AND ' | |
END | |
Set @TEM_FILTRO = 1 | |
END | |
END | |
FETCH NEXT FROM XML_CURSOR | |
INTO | |
@NOME_TABELA, @NOME_COLUNA, @VALOR_COLUNA, @COLUNA_EDITAVEL, @COLUNA_CHAVE, @TIPO_COLUNA; | |
END; | |
CLOSE XML_CURSOR; | |
DEALLOCATE XML_CURSOR; | |
SELECT @QUERY_UPDATE_2 = LEFT(@QUERY_UPDATE_2, LEN(@QUERY_UPDATE_2) - 1) | |
SELECT @QUERY_UPDATE_3 = LEFT(@QUERY_UPDATE_3, LEN(@QUERY_UPDATE_3) - 4) | |
SET @QUERY_UPDATE_1 = @QUERY_UPDATE_1 + @NOME_TABELA | |
SET @QUERY_UPDATE = @QUERY_UPDATE_1 + @QUERY_UPDATE_2 | |
IF (@TEM_FILTRO = 1) | |
BEGIN | |
SET @QUERY_UPDATE = @QUERY_UPDATE + @QUERY_UPDATE_3 | |
END | |
EXEC(@QUERY_UPDATE) | |
--PRINT @QUERY_UPDATE | |
End |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment