Na pergunta Existe alguma função interna (oculta) no MS-SQL para retirar as aspas de nomes de objetos? o autor estava procurando conselhos sobre se havia uma função interna para "UNQUOTE" uma string entre aspas. O autor McNets havia notado que algumas funções internas podiam lidar com valores de parâmetros entre aspas (eg [MyTable]
) e sem aspas (eg ) MyTable
passados (eg OBJECT_ID()
).
Na resposta ( 1 ) dada por David Browne - Microsoft foi feita a citação que:
...o inverso de QUOTENAME é PARSENAME, que tem a capacidade adicional de navegar por nomes de várias partes.
Eu discordei desta parte da resposta com o seguinte comentário:
Concordo que você pode modificar um argumento passado para
PARSENAME()
exibir as partes de um identificador de várias partes, sejaSERVER
,DATABASE
,SCHEMA
ouOBJECT
part. Mas IMHO afirmando quePARSENAME
é o oposto deQUOTENAME
é um pouco exagerado.
Minha pergunta agora é:
A função é PARSENAME()
o oposto de QUOTENAME()
?
Baseado no comentário de ypercubeᵀᴹ que diz:
... Criei uma instrução simples para dar uma olhada nos diferentes valores retornados por essas funções. O código é o seguinte:
Código
Basicamente, defino valores de string, produzo esse valor
QUOTENAME()
e produzo o valor, depoisPARSENAME()
oQUOTENAME()
valor ed e o produzo.Resultados
Os resultados foram bastante interessantes:
Quando o texto base
Test.dbo.test
( OriginalText_3 ) é passado para aQUOTENAME()
função, ele é convertido em:'Test.dbo.test'
( QuotedText_3 )Quando a string QuotedText_3
'Test.dbo.test'
é passada para aPARSENAME()
função, ela é convertida em:test'
( Parsed_QuotedText_3 )Conclusão
Visto que provei a tese de ypercubeᵀᴹ errada, acho que é seguro afirmar que a função
PARSENAME()
não é a inversa deQUOTENAME()
.Com base no feedback de Aaron Bertrand aqui o código para colchetes (adicionar ao script original)
[ ]
Código adicional para colchetes
[ ]
Saída para colchetes
[ ]
e para completar as coisas o código para as aspas duplas
Código adicional para aspas duplas
"
Saída para aspas duplas
"
Com base no feedback do ypercube™ e no novo feedback de Aaron Bertrand , chegamos a uma conclusão mútua
PARSENAME()
é o inverso deQUOTENAME()
se as seguintes condições forem atendidas:PARSENAME(x,1)
-1
(QUOTENAME(x,q))
ondeq={1,2}
ex='{'any_string_value'}
Referências: