Karuta’s ASP & M$ SQLserver

Dicas, códigos e outras coisinhas de meus estudos para não esquecer…

Archive for agosto \24\UTC 2018

Tratamento de erros no SQL Server (TRY-CATCH)

Posted by karuta em agosto 24, 2018

— Criando tabela para teste 
CREATE TABLE #teste (id int)

— Adicionando restrição à tabela.
— Somente IDs menores do que 10 serão aceitos 

ALTER TABLE #teste ADD CONSTRAINT chkID CHECK (id < 10)

 

— Executando a tarefa em transação
BEGIN TRANSACTION

BEGIN TRY
        
    INSERT INTO #teste VALUES (5)
    INSERT INTO #teste VALUES (2)
    INSERT INTO #teste VALUES (13)  — Inserção de ID inválido

    COMMIT TRANSACTION — Efetivando alterações na base

END TRY
BEGIN CATCH
    
    PRINT ‘Erro ao executar script’
    ROLLBACK TRANSACTION — Desfazendo as alterações na base
          
END CATCH

SELECT * FROM #teste

DROP TABLE #teste

Anúncios

Posted in sql server, store procedure | Leave a Comment »

Uso de WITH e MERGE para inserção em lote pegando os ID do campo Identity Increment

Posted by karuta em agosto 24, 2018

agenda 1 – tabela com os dados [id_agenda1, nome, telefone]

agenda 2  – tabela nova que vai receber os dados [id_agenda2, nome, telefone]

agenda 3 – id da agenda1 e id criado na agenda 2 [id_agenda1, id_agenda2]

 


;WITH magica
AS (
SELECT * FROM [agenda1]
)
MERGE INTO [agenda2]
USING magica Y
ON 1 = 0
WHEN NOT MATCHED THEN
INSERT (nome, telefone)
OUTPUT INSERTED.id_agenda2, Y.id_agenda1  INTO agenda3;

Posted in sql server, store procedure | 2 Comments »

Função para criar JSON a partir de um XML

Posted by karuta em agosto 16, 2018

— Como usar:
SELECT dbo.FlattenedJSON(
(select top 10 artista_id, empresa_id, data_alteracao, login_alteracao from yb_artistas
FOR XML path, root)
)
— —————————————————————————————————————–
CREATE FUNCTION dbo.FlattenedJSON (@XMLResult XML)
RETURNS NVARCHAR(MAX)
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE  @JSONVersion NVARCHAR(MAX), @Rowcount INT
SELECT @JSONVersion = , @rowcount=COUNT(*) FROM @XMLResult.nodes(‘/root/*’) x(a)
SELECT @JSONVersion=@JSONVersion+
STUFF(
  (SELECT TheLine FROM
    (SELECT ‘,
    {‘+
      STUFF((SELECT ‘,”‘+COALESCE(b.c.value(‘local-name(.)’, ‘NVARCHAR(255)’),)+‘”:”‘+
       REPLACE( –escape tab properly within a value
         REPLACE( –escape return properly
           REPLACE( –linefeed must be escaped
             REPLACE( –backslash too
               REPLACE(COALESCE(b.c.value(‘text()[1]’,‘NVARCHAR(MAX)’),),–forwardslash
               ‘\’, ‘\\’),
              ‘/’, ‘\/’),
          CHAR(10),‘\n’),
         CHAR(13),‘\r’),
       CHAR(09),‘\t’)
     +‘”‘
     FROM x.a.nodes(‘*’) b(c)
     FOR XML PATH(),TYPE).value(‘(./text())[1]’,‘NVARCHAR(MAX)’),1,1,)+‘}’
   FROM @XMLResult.nodes(‘/root/*’) x(a)
   ) JSON(theLine)
  FOR XML PATH(),TYPE).value(‘.’,‘NVARCHAR(MAX)’ )
,1,1,)
IF @Rowcount>1 RETURN ‘[‘+@JSONVersion+
]’
RETURN @JSONVersion
END

Posted in sql server, store procedure | Leave a Comment »