Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Analítica (PDW)
Base de datos SQL en Microsoft Fabric
La utilidad sqlcmd permite escribir instrucciones Transact-SQL, procedimientos del sistema y archivos de script.
Note
Para averiguar qué variante y versión de sqlcmd está instalada en el sistema, consulte Comprobar la versión instalada de la utilidad sqlcmd. Para obtener información sobre cómo obtener sqlcmd, vea Descargar e instalar la utilidad sqlcmd.
Variables de scripting en sqlcmd
Las variables que se usan en scripts se denominan variables de scripting. Las variables de scripting posibilitan el uso de un script en varias situaciones. Por ejemplo, si desea ejecutar un script en varios servidores, en lugar de modificar el script para cada servidor, puede usar una variable de scripting para el nombre del servidor. Al cambiar el nombre del servidor proporcionado a la variable de scripting, el mismo script puede ejecutarse en diferentes servidores.
Las variables de scripting se pueden definir explícitamente mediante el setvar comando o implícitamente mediante la sqlcmd -v opción .
En este artículo también se incluyen ejemplos de definición de variables de entorno en la línea de comandos mediante SET.
Establecer variables de script con el comando setvar
El comando setvar define variables de scripting. Las variables definidas mediante el setvar comando se almacenan internamente. Las variables de scripting no deben confundirse con las variables de entorno que se definen en el símbolo del sistema mediante SET. Si un script hace referencia a una variable que no es una variable de entorno o no se define mediante setvar, se devuelve un mensaje de error y se detiene la ejecución del script. Para más información, consulte la opción -b en sqlcmd.
Precedencia de variables (menor a mayor)
Si hay más de un tipo de variable con el mismo nombre, se usa la variable que tenga la prioridad más alta.
- Variables de entorno del nivel del sistema
- Variables de entorno del nivel del usuario
- Shell de comandos (
SET X=Y) establecido en el símbolo del sistema antes de iniciar sqlcmd sqlcmd -v X=Y:Setvar X Y
Note
Para ver las variables de entorno en Windows 11, abra Configuración y, a continuación, vaya aAcerca del > y seleccione el vínculo Configuración avanzada del sistema. En la ventana Propiedades del sistema, seleccione Variables de entorno. En Linux, escriba printenv en la línea de comandos y, en macOS, escriba env.
Definir las variables de scripting implícitamente
Al iniciar sqlcmd con una opción que tiene una variable sqlcmd relacionada, la variable sqlcmd se establece implícitamente en el valor especificado mediante la opción. En el siguiente ejemplo, sqlcmd se inicia con la opción -l . Esto establece implícitamente la variable SQLLOGINTIMEOUT.
sqlcmd -l 60
También puede usar la opción -v para establecer una variable de scripting que existe en un script. En el script siguiente (el nombre de archivo es testscript.sql), ColumnName es una variable de scripting.
USE AdventureWorks2022;
SELECT x.$(ColumnName)
FROM Person.Person x
WHERE x.BusinessEntityID < 5;
Después, puede especificar el nombre de la columna que desea que se devuelva mediante la opción -v :
sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql
Para devolver otra columna usando el mismo script, cambie el valor de la variable de scripting ColumnName .
sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql
Directrices para los nombres y valores de variable de script
Al especificar un nombre para las variables de script, tenga en cuenta lo siguiente:
Los nombres de variable no deben contener caracteres de espacio en blanco ni comillas.
Los nombres de variable no deben tener la misma forma que una expresión variable, como $(var) .
Las variables de scripting no distinguen entre mayúsculas y minúsculas
Note
Si no se asigna ningún valor a una variable de entorno sqlcmd , se quita la variable. Utilizar
:setvar VarNamesin un valor borra la variable.
Al especificar valores para las variables de scripting, tenga en cuenta lo siguiente:
- Los valores de variable definidos mediante
setvaro la-vopción deben ir entre comillas si el valor de cadena contiene espacios. - Si las comillas forman parte del valor de variable, es necesario usar un carácter de escape. Por ejemplo: :
setvar MyVar "spac""e".
Directrices para los nombres y valores de la variable SET de Cmd.exe
Las variables que se definen mediante SET forman parte del entorno de cmd.exe y se puede hacer referencia a ellas mediante sqlcmd. Tenga en cuenta las directrices siguientes:
- Los nombres de variable no deben contener caracteres de espacio en blanco ni comillas.
- Los valores de variable pueden contener espacios o comillas.
Variables de scripting sqlcmd
| Variable | Opción relacionada | R/W | Default |
|---|---|---|---|
SQLCMDUSER
1 |
-U |
R
2 |
"" |
SQLCMDPASSWORD
1 |
-P |
-- |
"" |
SQLCMDSERVER
1 |
-S |
R
2 |
"DefaultLocalInstance" |
SQLCMDWORKSTATION |
-H |
R
2 |
"ComputerName" |
SQLCMDDBNAME |
-d |
R
2 |
"" |
SQLCMDLOGINTIMEOUT |
-l |
R/W
3 |
"8" (segundos) |
SQLCMDSTATTIMEOUT |
-t |
R/W
3 |
"0" = esperar indefinidamente |
SQLCMDHEADERS |
-h |
R/W
3 |
"0" |
SQLCMDCOLSEP |
-s |
R/W
3 |
" " |
SQLCMDCOLWIDTH |
-w |
R/W
3 |
"0" |
SQLCMDPACKETSIZE |
-a |
R
2 |
"4096" |
SQLCMDERRORLEVEL |
-m |
R/W
3 |
"0" |
SQLCMDMAXVARTYPEWIDTH |
-y |
R/W
3 |
"256" |
SQLCMDMAXFIXEDTYPEWIDTH |
-Y |
R/W
3 |
"0" = ilimitado |
SQLCMDEDITOR |
R/W
3 |
"edit.com" | |
SQLCMDINI |
R
2 |
"" |
1 SQLCMDUSER, SQLCMDPASSWORD and SQLCMDSERVER se establecen cuando se usa :Connect.
2 L indica que el valor solo puede establecerse una vez durante la inicialización del programa.
3 R/W indica que el valor se puede restablecer mediante el setvar comando y los comandos posteriores usan el nuevo valor.
Examples
Los ejemplos de código de este artículo usan la base de datos de ejemplo de AdventureWorks2025 o AdventureWorksDW2025, que puede descargar de la página principal de Ejemplos de Microsoft SQL Server y proyectos de comunidad.
A. Uso del comando setvar en un script
Muchas opciones de sqlcmd pueden controlarse en un script mediante el comando setvar . En el siguiente ejemplo, se crea el script test.sql ; en él, la variable SQLCMDLOGINTIMEOUT está establecida en 60 segundos y otra variable de scripting, server, está establecida en testserver. El siguiente código está en test.sql.
:setvar SQLCMDLOGINTIMEOUT 60
:setvar server "testserver"
:connect $(server) -l $(SQLCMDLOGINTIMEOUT)
USE AdventureWorks2022;
SELECT FirstName, LastName
FROM Person.Person;
Se llama al script mediante sqlcmd:
sqlcmd -i c:\test.sql
B. Uso del comando setvar interactivamente
En el ejemplo siguiente se muestra cómo establecer una variable de script de manera interactiva mediante el comando setvar .
sqlcmd
:setvar MYDATABASE AdventureWorks2022
USE $(MYDATABASE);
GO
Este es el conjunto de resultados.
Changed database context to 'AdventureWorks2022'
1>
C. Uso de variables de entorno del símbolo del sistema en sqlcmd
En el ejemplo siguiente, se establecen cuatro variables de entorno are , a las que luego se llama desde sqlcmd.
SET tablename=Person.Person
SET col1=FirstName
SET col2=LastName
SET title=Ms.
sqlcmd -d AdventureWorks2022
1> SELECT TOP 5 $(col1) + ' ' + $(col2) AS Name
2> FROM $(tablename)
3> WHERE Title ='$(title)'
4> GO
D. Uso de variables de entorno de usuario con sqlcmd
En el ejemplo siguiente, se establece la variable de entorno de usuario %Temp% en el símbolo del sistema y se pasa al archivo de entrada de sqlcmd. Para obtener la variable de entorno de nivel de usuario, en el Panel de control, haga doble clic en Sistema. Seleccione la pestaña Avanzado y, a continuación, seleccione Variables de entorno.
El código siguiente se encuentra en el archivo de entrada C:\testscript.txt:
:OUT $(MyTempDirectory)
USE AdventureWorks2022;
SELECT FirstName
FROM AdventureWorks2022.Person.Person
WHERE BusinessEntityID < 5;
El código siguiente se escribe en el símbolo del sistema:
SET MyTempDirectory=%Temp%\output.txt
sqlcmd -i C:\testscript.txt
El siguiente resultado se envía al archivo de resultados C:\Documents and Settings\<user>\Local Settings\Temp\output.txt.
Changed database context to 'AdventureWorks2022'.
FirstName
--------------------------------------------------
Gustavo
Catherine
Kim
Humberto
(4 rows affected)
E. Uso de un script de inicio
Un script de inicio sqlcmd se ejecuta al iniciar sqlcmd . En el ejemplo siguiente se establece la variable de entorno SQLCMDINI. Este es el contenido de init.sql.
SET NOCOUNT ON
GO
DECLARE @nt_username nvarchar(128)
SET @nt_username = (SELECT rtrim(convert(nvarchar(128), nt_username))
FROM sys.dm_exec_sessions WHERE spid = @@SPID)
SELECT @nt_username + ' is connected to ' +
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('servername'))) +
' (' +`
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('productversion'))) +
')'
:setvar SQLCMDMAXFIXEDTYPEWIDTH 100
SET NOCOUNT OFF
GO
:setvar SQLCMDMAXFIXEDTYPEWIDTH
De esta manera, se llama al archivo init.sql cuando se inicia sqlcmd.
SET sqlcmdini=c:\init.sql
sqlcmd
Este es el resultado.
1> <user> is connected to <server> (9.00.2047.00)
Note
La opción -X deshabilita la característica de script de inicio.
F. Expansión de variables
En el ejemplo siguiente se muestra cómo trabajar con datos que tienen el formato de una variable de sqlcmd .
USE AdventureWorks2022;
GO
CREATE TABLE AdventureWorks2022.dbo.VariableTest (Col1 NVARCHAR(50));
GO
Inserte una fila en la Col1 de dbo.VariableTest que contiene el valor $(tablename).
INSERT INTO AdventureWorks2022.dbo.VariableTest (Col1)
VALUES ('$(tablename)');
GO
En el símbolo del sistema de sqlcmd, cuando no hay establecida ninguna variable en $(tablename), las instrucciones siguientes devuelven la fila y también el mensaje "Variable de script 'tablename' no definida". De manera predeterminada, la marca sqlcmd-b no está establecida. Si se establece -b, sqlcmd finalizará después del error de "variable no definida".
sqlcmd
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
2> GO
3> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
4> GO
Este es el conjunto de resultados.
1> Col1
2> ------------------
3> $(tablename)
4>
5> (1 rows affected)
Si la variable MyVar está establecida en $(tablename).
6> :setvar MyVar $(tablename)
Estas instrucciones devuelven la fila y, además, un mensaje que indica que "No se definió la variable de script 'nombreDeTabla'".
6> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
7> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
2> GO
Estas instrucciones devuelven la fila.
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';
2> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';
2> GO
Contenido relacionado
- Más información sobre sqlcmd (Go) en GitHub
- Inicio rápido: Ejecución de imágenes de contenedor de SQL Server para Linux con Docker
- Iniciar la utilidad sqlcmd
- Ejecución de T-SQL desde un archivo de script con sqlcmd
- usar la utilidad
- Uso del sqlcmd con variables de scripting
- Conexión a SQL Server con sqlcmd
- Modificar scripts SQLCMD con el Editor de consultas
- Administrar las etapas de trabajo
- Crear un paso de trabajo CmdExec