El primer argumento para el procedimiento almacenado del sistema sp_helptext
es:
[
@objname
= ] 'name'
Es el nombre calificado o no calificado de un objeto definido por el usuario y con ámbito de esquema. Las comillas solo son necesarias si se especifica un objeto calificado. Si se proporciona un nombre completo, incluido un nombre de base de datos, el nombre de la base de datos debe ser el nombre de la base de datos actual. El objeto debe estar en la base de datos actual. nombre es nvarchar(776)
, sin defecto.
Además, la documentación para identificadores delimitados (motor de base de datos) establece:
Uso de identificadores como parámetros en SQL Server
Muchos procedimientos almacenados del sistema, funciones y sentencias DBCC toman nombres de objetos como parámetros. Algunos de estos parámetros aceptan nombres de objetos de varias partes, mientras que otros solo aceptan nombres de una parte. Si se espera un nombre de una o varias partes determina cómo SQL Server analiza y usa internamente un parámetro.
Nombres de parámetros de una parte
Si el parámetro es un identificador de una parte, el nombre se puede especificar de las siguientes maneras:
- Sin comillas ni delimitadores
- Encerrado entre comillas simples
- Encerrado entre comillas dobles
- Encerrado entre paréntesis
Nombres de parámetros de
varias partes Los nombres de varias partes son nombres calificados que incluyen el nombre de la base de datos o del esquema y también el nombre del objeto. Cuando se utiliza un nombre multiparte como parámetro, SQL Server requiere que la cadena completa que conforma el nombre multiparte se encierre en un conjunto de comillas simples.
El primer argumento para sp_helptext
aceptar nombres de objetos de una parte (no calificados) y multipartes (calificados).
Si el analizador T-SQL interpreta el elemento después sp_helptext
como un nombre de parte única (de acuerdo con los cuatro puntos anteriores), el nombre resultante se pasa como el valor de argumento (tipo de cadena) esperado por el procedimiento.
Cuando el analizador lo ve como un nombre de varias partes , el texto debe estar entre comillas simples como se indica.
La característica clave de un nombre multiparte es un .
separador (fuera de los delimitadores).
Estos ejemplos de la pregunta se interpretan con éxito como nombres de una parte:
myproc - parte simple (sin comillas ni delimitadores - viñeta # 1)
[myproc] - pieza única (entre paréntesis - viñeta # 4)
'myproc' - parte simple (entre comillas simples - viñeta # 2)
'dbo.myproc' - multiparte con las comillas simples requeridas
[dbo.myproc] - una parte (entre paréntesis - viñeta # 4)
Los dos últimos ejemplos de la pregunta se analizan como nombres de parámetros de varias partes (debido al .
separador expuesto ). Producen un error porque carecen de las comillas simples que se incluyen:
dbo.myproc: multiparte sin las comillas simples requeridas
[dbo]. [myproc] - multiparte sin las comillas simples requeridas
Este ejemplo adicional usando comillas dobles es exitoso:
"dbo.myproc" - parte simple (entre comillas dobles - viñeta # 3)
Tenga en cuenta que se interpreta con éxito (para el valor del parámetro del procedimiento) como un nombre válido de una sola parte , pero el código del procedimiento puede interpretar la cadena (multiparte) que recibe de manera flexible (usando PARSENAME
y OBJECTID
).
Como último punto de interés, tenga en cuenta que el uso de comillas dobles aquí no depende de la configuración de QUOTED_IDENTIFIER
.