Short Scripts – Fevereiro 2024

Olá pessoal, boa tarde…

Tudo bem? Sexta-feira véspera de carnaval, o Brasil pulsando por estes dias de folia, alegria e muita agitação. Não se esquecendo que devemos ter responsabilidade.


Seja bem-vindo, em mais um post da sessão Short Scripts, o primeiro post desta sessão em 2024, como também, o número 49 em seu total.

Mantendo a tradição estou retornando com mais um conjunto dos “curtos ou pequenos” scripts catalogados e armazenados em minha biblioteca pessoal de códigos relacionados ao Microsoft SQL Server e sua fantástica linguagem de desenvolvimento Transact-SQL.

Como promessa é dívida e deve ser cumprida “ou melhor” compartilhada, vou pagar a minha mais uma vez hoje, feita no encerramento do post anterior publicado no mês de outubro de 2023, se por acaso você ainda não acessou o mesmo, calma, fique tranquilo, tudo vai dar certo, no encerramento deste post você terá a sua disposição a relação das últimas cinco publicações relacionadas aos Short Scripts.

Vamos caminhar mais um pouco então……..

O post de hoje

Para este post, vou compartilhar um conjunto diversificado de scripts dedicados ao uso do formato de armazenamento e apresentando dados em XML, padrão mundialmente conhecido e utilizando no início dos anos 2000, posteriormente adicionado como funcionalidade ao Microsoft SQL Server a partir da versão 2005.

Os exemplos de código aqui compartilhados se relacionam com os seguintes assuntos:

● Comando Create Table;
● Comando EXEC;
● Comando Insert;
● Comando Order By;
● Comando Select;
● Comando Union All;
● Data Method XML;
● Declaração de variáveis no formato XML;
● Exist Method XML;
● Extended Stored Procedure XP_CMDShell;
● Ferramenta de Linha de Comando BCP;
● Função OpenXML();
● Linguagem XQuery;
● Opção Elements XSINIL;
● Opção For XML Auto;
● Opção For XML Explicit;
● Opção For XML Path;
● Opção For XML Raw;
● Opção For XML Root;
● Opção For XML Type;
● Query Method XMl;
● System Stored Procedure SP_XML_PrepareDocument;
● Tabela de Sistema sysobjects;
● Tabela Temporárias Locais;
● Tipo de Dados XML; e
● XMLNameSpaces.

Chegou a hora, mãos nos teclados, a seguir apresento os códigos e exemplos selecionados para o Short Script – Fevereiro 2024.


Short Scripts

Vale ressaltar que todos os scripts publicados nesta sessão foram devidamente testados, mas isso não significa que você pode fazer uso dos mesmo em seu ambiente de produção, tenha todo cuidado possível para evitar maiores problemas.

Short Script 1 – Apresentando o mesmo conjunto de dados no formato XML, de formas diferentes

-- Passo 1 -- Criando a Tabela Temporária #Customers --
Create Table #customers
(id int,
customer varchar(50)
)

-- Passo 2 -- Inserindo o conjunto de dados --
Insert Into #Customers Values (1,'John')
Insert Into #Customers Values (2,'Lyss')
Insert Into #Customers Values (3,'Jack')
Insert Into #Customers Values (4,'David')
Insert Into #Customers Values (5,'Anne')
Insert Into #Customers Values (6,'Victoria')

-- Passo 3 -- Utilizando a Opção For XML Explicit, Root --
SELECT 1 AS tag, NULL AS parent, id AS [customers!1!id],
customer AS [customers!2!customer]
FROM #customers AS customersa
UNION ALL
SELECT 2 AS tag, 1 AS parent, id AS [customers!1!id],
customer AS [customers!2!customer]
FROM #customers AS customersb
ORDER BY [customers!2!customer] DESC,parent
FOR XML EXPLICIT, ROOT ('customers')
Go

-- Passo 4 -- Utilizando a Opção For XML Path, Root--
SELECT id AS [customers/@id],
customer AS [customers/customers/@customer]
FROM #customers AS customesra
ORDER BY customer DESC
FOR XML PATH(''),ROOT('customers')
Go

-- Passo 5 -- Utilizando a Opção For XML Auto, Root --
SELECT customersa.id AS [customers.id],
customersb.customer AS [customers.customer]
FROM #customers AS customersa
INNER JOIN #customers AS customersb ON customersb.id=customersa.id
ORDER BY customersa.customer DESC
FOR XML AUTO, ROOT('customers')
Go

-- Passo 6 -- Utilizando uma varíavel XML em conjunto com a Linguagem XQuery --
-- Declarando a variavel --
DECLARE @x AS XML

-- Atribuindo o resultado do comando select para variável @X --
SET @x=(
SELECT id, customer
FROM #customers AS customersa
FOR XML RAW('customer'),ROOT('customers'),TYPE
)

-- Apresentando os dados através da linguagem XQuery --
SELECT @x.query('
for $e in customers/customer
order by $e/@customer descending
return <customers id="{$e/@id}">
<customers customer="{$e/@customer}">
</customers>
</customers>')
FOR XML RAW('customers')
Go

Short Script 2 – Utilizando Linguagem XQuery e Methods

-- Exemplo 1 -- XQuery em conjunto com Data Methods --
-- Declarando a variável --
DECLARE @SampleXML XML

-- Atribuindo os valores para variável no formato XML --
SET @SampleXML = ' -- Montando a Estrutura XML --
<root>
<L1>
<L2>This is the First Line</L2>
</L1>
<L1>
<L2>This is the Second Line</L2>
</L1>
</root>'

-- Apresentando o resultado --
SELECT @SampleXML.query('data(/root/L1[L2 = "This is the Second Line"])')
Go

-- Exemplo 2 -- XQuery em conjunto com Exists Methods --
-- Declarando as variáveis --
DECLARE @SampleXML XML, @Exists bit

-- Atribuindo os valores para as respectivos variáveis no formato XML --
SET @SampleXML = '
<root>
<L1>
<L2>This is the First Line</L2>
</L1>
<L1>
<L2>This is the Second Line</L2>
</L1>
</root>'


SET @Exists = @SampleXML.exist('/root/L1/L2[text() =
"This is the First Line"]')

-- Apresentando o resultado --
SELECT @Exists
Go

-- Exemplo 3 -- XQuery em conjunto com Query Methods--
-- Declarando a variável XML --
DECLARE @SampleXML XML

-- Atribuindo o valor para variável no formato XML --
SET @SampleXML = '
<root>
<L1>
<L2>This is the First Line</L2>
</L1>
<L1>
<L2>This is the Second Line</L2>
</L1>
</root>'

-- Apresentando o resultado --
SELECT @SampleXML.query('data(/root/L1/L2)')
Go

Short Script 3 – Utilizando XMLNameSpaces em conjunto com Elements XSINIL

With XMLNAMESPACES ('uri' as g)

SELECT
dbid as 'g:ID',
name as 'g:NOME'
FROM sys.sysdatabases
FOR XML RAW('item'), ROOT('xml'), ELEMENTS XSINIL
Go

Short Script 4 – Utilizando comando BCP para exportar dados para um arquivo XML

-- Declarando o Comando Exec --
EXEC master.dbo.xp_cmdshell

-- Montando a sintaxe do comando bcp para lêr e exportar dados do SQL Server para o arquivo XML --

'bcp "SELECT * FROM master.dbo.sysobjects FOR XML AUTO" queryout C:\xml.xml -S "SERVER" -T -c'

Short Script 5 – Montando um arquivo XML, realizando a leitura e apresentação através do comando Select

-- Declarando as variáveis de controle --

DECLARE @DocHandle int
DECLARE @XmlDocument nvarchar(4000)

-- Atribuindo os valores para variável @XMLDocument --
SET @XmlDocument = N'<ROOT>
<produtos CODIGO="21" DESCRICAO="TOP" MARCA="TOP" ></produtos>
<produtos CODIGO="23" DESCRICAO="STANDARD" MARCA="STANDARD" ></produtos>
<produtos CODIGO="27" DESCRICAO="PÃO DE AÇÚCAR" MARCA="TOP" ></produtos>
<produtos CODIGO="28" DESCRICAO="SOFT" MARCA="SOFT" ></produtos>
</ROOT>'

-- Executando a System Stored Procedure SP_XML_PrepareDocument para lêr e apresentar os dados como um Documento XML --
EXEC sp_xml_preparedocument @DocHandle OUTPUT, @XmlDocument
SELECT * FROM OPENXML (@DocHandle, '/ROOT/produtos',1)
With (CODIGO VarChar(3),
DESCRICAO VarChar(50),
MARCA VARCHAR(20))
Go

Short Script 6 – Trabalhando com Primary Index XML

-- Criando a Tabela Products --
CREATE TABLE dbo.Products(
ProductID int NOT NULL,
Name dbo.Name NOT NULL,
CatalogDescription xml NULL,
CONSTRAINT PK_ProductModel_ProductID PRIMARY KEY CLUSTERED
( ProductID ));

-- Inserindo os dados --
INSERT INTO dbo.Products (ProductID,Name,CatalogDescription)
SELECT ProductModelID, Name, CatalogDescription
FROM Production.ProductModel;

-- Criando o Primary Index XML aplicada a coluna CatalogDescription --
CREATE PRIMARY XML INDEX PRXML_Products_CatalogDesc
ON dbo.Products (CatalogDescription);
GO

-- Estabelecendo o XML Schema --
WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS "PD")

-- Apresentando o resultado com base no XML Schema --
SELECT ProductID, CatalogDescription
FROM dbo.Products
WHERE CatalogDescription.exist ('/PD:ProductDescription/PD:Features') = 1
Go

Fique à vontade para compartilhar, comentar e melhorar cada um destes códigos.


Muito bem, missão mais que cumprida!

Uma super e especial relação de short scripts acaba de ser compartilhada, mesmo sendo denominados shorts entre aspas “curtos ou pequenos”, posso garantir que todos estes exemplos são de grande importância, apresentam um valor e conhecimento do mais alto nível.

Chegamos ao final de mais um Short Scripts, espero que este material possa lhe ajudar, ilustrando o uso de alguns recursos e funcionalidades do Microsoft SQL Server.

Acredito que você tenha observado que estes códigos são conhecidos em meu blog, todos estão relacionados aos posts dedicados ao Microsoft SQL Server publicados no decorrer dos últimos anos.

Boa parte deste material é fruto de um trabalho dedicado exclusivamente a colaboração com a comunidade, visando sempre encontrar algo que possa ser a solução de um determinado problema, bem como, a demonstração de como se pode fazer uso de um determinado recurso.

Links

Caso você queira acessar os últimos posts desta sessão, não perca tempo acesse os links listados abaixo:

Agradecimento

Obrigado mais uma vez por sua visita, fico honrado com sua ilustre presença, desejo e espero que você possa ter encontrado algo que lhe ajudou.

Volte sempre, nos encontraremos mais uma vez na sessão Short Scripts no próximo post.

Tenha uma ótima semana.

Abraços.