Microsoft SQL Server


Connection String

A connection string is a text string to store several variables and their values. The order is not important. Each variable and its value is separated by a semi colon. The variable and its value are separated by an equal sign. For instance, the connection string, shown below, allows connecting to a Microsoft SQL Server. The DRIVER value must be one that is displayed in the Control Panel > ODBC


Description    Connection String  
Local server with Windows AuthenticationDRIVER={SQL Server};SERVER=localhost\\SQLEXPRESS;DATABASE=my_database;Trusted_Connection=yes
Local server with Windows AuthenticationDRIVER={SQL Server};SERVER=.\\SQLEXPRESS;DATABASE=my_database;Trusted_Connection=yes
Local DBDRIVER={SQL Server Native Client 11.0};server=(localdb)\\MSSQLLocalDB;database=my_database;Trusted_Connection=yes
Local server with Windows Authentication default instanceDRIVER={SQL Server};SERVER=localhost;DATABASE=my_database;Trusted_Connection=yes
Local server with Windows Authentication default instanceDRIVER={SQL Server};SERVER=.;DATABASE=my_database;Trusted_Connection=yes
Remote server with SQL authenticationDRIVER={SQL Server};server=10.80.6.9\\SQLEXPRESS;database=my_database;UID=sa;PWD=123
Remote server (port) with SQL authenticationDRIVER={SQL Server};server=10.80.6.9,1433\\SQLEXPRESS;database=my_database;UID=sa;PWD=123

Tip
When the connection string is written inside the stdafx.h file, you must escape the backslash and type two backslash's. When the connection string is typed in a textbox, you do not need to escape the backslash, and therefore, only one backslash must be typed.
Cuando la cadena de conexión se escribe dentro del archivo stdafx.h, usted debe escapar la diagonal invertida y escribir dos diagonales invertidas. Cuando la cadena de conexión se escribe en una caja de texto, usted no necesita escapar la diagonal invertida, y por lo tanto, solamente se debe escribir una diagonal invertida.

Specify the database

In the example below, the circuit_city database will be use. Any SQL command, after this statement, will be applied to the circuit_city database.
En el ejemplo de abajo, la base de datos circuit_city será usada. Cualquier comando de SQL, después de este comando, serán aplicados a la base de datos circuit_city.

my_db.sql
USE circuit_city;


Trusted Connection

When the user logins into a computer, he provides a username and a password to get access to several resources. The user login and password may be in the local computer (Control panel > Users Accounts). Additionally, the login and password may be in a Domain (a local network or wide area network). Trusted Connection means that the credentials (permissions) of the user are set at the moment of logging. Thus, it is not necessary to provide a username and password when using a trusted connection in a connection string. When installing Microsoft SQL Server without remote access, you can use Windows Authentication. However, if you need remote access and you do not have a Domain Controller to provide Windows Authentication, you must install Microsoft SQL Server with Mixed Authentication by setting the password of the sa account.
Cuando el usuario se conecta a una computadora, este proporciona un nombre usuario y una clave de acceso para conseguir acceso a varios recursos. El nombre de usuario y clave pueden ser en la computadora local (Panel de Control > Cuentas de Usuario). Adicionalmente, el nombre de usuario y clave pueden ser en un Dominio (en una red local o una red de cobertura amplia). La Trusted Connection significa que las credenciales (permisos) del usuario se establecen en el momento de conectarse. Así, no es necesario proporcionar el nombre de usuario y su clave cuando se usa trusted connection en una cadena de conexión. Cuando se instala Microsoft SQL Server sin acceso remoto, usted puede usar Windows Authentication. Sin embargo, si usted necesita acceso remoto y usted no tiene un Servidor de Dominios que proporcione Windows Authentication, usted debe instalar Microsoft SQL Server con "Mixed Authentication" fijando el clave de acceso de la cuenta sa.

Create a table

The example creates a table: name is required while the phone number is optional. Use IDENTITY to automatically generate the IDs.
El ejemplo crea una tabla: el nombre es requerido mientras que el número de teléfono es opcional. Use IDENTITY para generar automáticamente los IDs.

my_db.sql
CREATE TABLE dbo.people
(
     people_id INT NOT NULL PRIMARY KEY IDENTITY,
     name NVARCHAR(45) NOT NULL,
     telephone NCHAR(10) NULL
);
GO

Tip
If a column name has spaces, for example if the programmer uses "people id" instead of people_id, you must use squared brackets to define the column as shown below. In fact, you will have to use squared brackets in all SQL commands for those column names that have spaces.
Si el nombre de una columna tiene espacios, por ejemplo si el programador usar "people id" en lugar de people_id, usted debe usar los paréntesis cuadrados para definir la columna como se muestra debajo. De hecho, usted tendrá que usar paréntesis cuadrados en todos los comandos de SQL para esos nombres de columnas que tengan espacios.

my_db.sql
CREATE TABLE dbo.people
(
     [people id] INT NOT NULL PRIMARY KEY IDENTITY,
     name NVARCHAR(45) NOT NULL,
     telephone NCHAR(10) NULL
);
GO

Simple insert

The example inserts one row in the department table.
El ejemplo inserta un renglón en la tabla departamento.

my_db.sql
INSERT INTO department VALUES('C', 'Computer Eng');
GO

DATE insert

The example inserts a row in the friend table.
El ejemplo inserta un renglón en la tabla amigo.

my_db.sql
INSERT INTO friend (birth_date) VALUES('C', 'April 25, 1952');
GO
-- INSERT INTO friend(birth_date) VALUES('C', CONVERT(DATETIME, '1952-04-25 00:00:02', 20));
-- GO

DATETIME insert

The example inserts a row in the transaccion table.
El ejemplo inserta un renglón en la tabla transaccion.

my_db.sql
INSERT INTO transaccion (date_time) VALUES('April 25, 1952 11:05 pm');
GO

SET DATEFORMAT()

In Microsoft SQL Server, it is possible to set the date format at the moment of performing an INSERT (without affecting the database configuration) as shown below.
En Microsoft SQL Server es posible especificar el formato de las fechas en el momento del ingreso de los datos (en forma temporal sin cambiar la configuración de la base de datos) como se muestra debajo.

SQL
SET DATEFORMAT dmy
GO
DECLARE @myVar DATETIME
SET @myVar = '12/31/98'
SELECT @myVar
GO


SQL
SET DATEFORMAT ydm
GO
DECLARE @myVar DATETIME
SET @myVar = '98/31/12'
SELECT @myVar
GO


SQL
SET DATEFORMAT ymd
GO
DECLARE @myVar DATETIME
SET @myVar = '98/12/31'
SELECT @myVar
GO

Data types

The table shows some examples of SQL data types.
La tabla muestra algunos ejemplos de tipos de datos en SQL.

Description_Data Types  
IntegerINT, SMALLINT, TINYINT
Text with 2 charactersCHAR(2), NCHAR(2)
Floating point four digitsNUMERIC(4, 1), DECIMAL(4, 1)
TextVARCHAR(30), NVARCHAR(30)
Date and TimeDATETIME (0.0033 sec), SMALLDATETIME (1 minute), DATETIME2 (100 nanosec), DATE (1 day)
DatesDATE (1 day)
BoolBIT
CurrencyMoney

Keys

The example creates a relation between two tables using a primary key and a foreign key.
El ejemplo crea una relación entre dos tablas usando una llave primaria y una llave extranjera.

my_db.sql
CREATE TABLE dbo.employee
(
     emp_id INT NOT NULL PRIMARY KEY,
     name NVARCHAR(20) NOT NULL
);
CREATE TABLE dbo.emp_skill
(
     emp_id INT NOT NULL REFERENCES employee(emp_id),
     skill_id INT NOT NULL REFERENCES skill(skill_id),
     PRIMARY KEY (emp_id, skill_ID)
);
GO

Cascade Delete

The example shows how to setup delete cascade.
El ejemplo muestra como configurar borrar en cascada.

my_db.sql
CREATE TABLE payroll
(
     emp_id INT(10) NOT NULL REFERENCES employee.emp_id ON DELETE CASCADE,
     descr VARCHAR(20) NOT NULL
);
GO

Unique Values

In the example, two or more students cannot have the same name.
En el ejemplo, dos o más estudiantes no pueden tener el mismo nombre.

my_db.sql
CREATE TABLE dbo.student
(
     student_id INT NOT NULL PRIMARY KEY,
     name NVARCHAR2(45) UNIQUE NOT NULL
);

Deleting Data

The example deletes the employee with emp_id 100.
El ejemplo borra al empleado con emp_id 100.

my_db.sql
DELETE FROM employee WHERE emp_id=100;

Altering a table

In the first example, the primary key of the table is added after creating the table. In the second example, a foreign key is added to the emp_skill table.
En el primer ejemplo, la llave primaria de la tabla es agregada después de crear la tabla. En el segundo ejemplo, una llave extranjera es agregad a la tabla emp_skill.

my_db.sql
CREATE TABLE dbo.frame
(
     frame_id SMALLINT NOT NULL,
     name NVARCHAR(30)
);
ALTER TABLE frame ADD PRIMARY KEY (frame_id);
GO

CREATE TABLE dbo.emp_skill
(
     emp_id INT NOT NULL,
     skill_id INT NOT NULL
);
ALTER TABLE emp_skill
ADD FOREIGN KEY (emp_id) REFERENCES employee(emp_id);
GO

Data Validation

In first the example, the weight column has a CONSTRAINT called validate_weight to ensure a value from 0 to 300. In the second example, the state can be either NY or NJ.
En el primer ejemplo, la columna peso tiene una restricción llamada validate_weight para asegurar un valor desde 0 a 300. En el segundo ejemplo, el estado puede ser ya sea NY o NJ.

my_db.sql
CREATE TABLE dbo.patient
(
     patient_id INT NOT NULL PRIMARY KEY,
     name NVARCHAR2(20) NOT NULL,
     weight INT(3) CONSTRAINT validate_weight CHECK (weight BETWEEN 0 AND 300)
);
GO

CREATE TABLE dbo.store
(     
          store_id INT NOT NULL PRIMARY KEY INDENTITY,     
          state NCHAR(2) CHECK (state='NY' OR state='NJ')
);
GO

Dropping Objects

In the previous example to remove the CONSTRAINT called validate_weight, you may use: DROP CONSTRAINT validate_weight. To destroy the store table: DROP TABLE store.
En el ejemplo previo para remover la CONSTRAINT llamada validate_weight, usted puede usar DROP CONSTRAINT validate_weight. Para destruir la tabla store: DROP TABLE store.

Database Date

The example below automatically inserts the current date and time.
En el ejemplo de abajo se inserta automáticamente la fecha y el tiempo actual.

my_db.sql
CREATE TABLE dbo.sale
(
     sale_id INT NOT NULL PRIMARY KEY IDENTITY,
     sale_date DATE NOT NULL DEFAULT GETDATE()
);
GO

Modifying an Object

In first the example, the admission column is added after creating the table. In the second example, the name column is changed from NVARCHAR(20) to NVARCHAR(30).
En el primer ejemplo, la columna admission se agrega después que la tabla ha sido creada. En el segundo ejemplo, el estado puede ser ya sea NY o NJ.

my_db.sql
CREATE TABLE patient
(
     patient_id NUMBER NOT NULL,
     name NVARCHAR(20) NOT NULL
);
GO

ALTER TABLE patient
ADD admission DATE NOT NULL;
GO

ALTER TABLE patient
MODIFY name NVARCHAR(30);
GO


Tip
Trying to alter a table structure, when the table contains data, may not always be possible. Always populate your table after you have defined the table structure.
Intentar alterar la estructura de una tabla, cuando la tabla contiene datos, puede no ser siempre posible. Siempre introduzca datos a una tabla después de haber definido su estructura.

Microsoft SQL Server and Microsoft Excel

The code below illustrates how it is possible to import from a Microsoft Excel document. You need to install Microsoft ACE Oledb to use this tool. Additionally, you may need to install Microsoft SQL Service pack to use this command.
El código de abajo ilustra cómo es posible importar desde un documento de Microsoft Excel. Usted necesita instalar Microsoft ACE Oledb para usar esta herramienta. Adicionalmente, usted necesita instalar el service pack de Microsoft SQL para usar este comando.

excel_to_sql.sql

CREATE TABLE my_table
(
     ...
);
GO
INSERT INTO my_table
SELECT * FROM
     OPENROWSET
     (
          'Microsoft.ACE.OLEDB.12.0',
          'Excel 12.0;Database=C:\Users\Peter\my_doc.xlsx;HDR=YES',
          'SELECT * FROM [Sheet1$]'
     );
GO


Deleting a database (DROP DATABASE)

To delete a database you can use DROP DATABASE. You cannot destroy a database when there are open connections to this database. If you try to delete a database when there are users connect to it, you will get the following error.
Para borrar una base de datos usted puede usar DROP DATABASE. Usted no puede destruir una base de datos cuando hay conexiones abiertas a esta base de datos. Si usted trata de borrar una base de datos cuando hay usuarios conectados a esta, usted obtendrá el siguiente error.

MSDOS: cmd.exe
Msg 3702, Level 16, State 4, Line 3
Cannot drop database "test" because it is currently in use.


Who

To list of the users that are connected to the databases, execute the sp_who2 stored procedure as shown.
Para listar los usuarios que están conectados a las bases de datos, ejecute el procedimiento almacenado sp_who2 como se muestra.

Test.sql
USE master;
EXEC sp_who2;


KILL

You can use KILL to terminate connections to a database. You can use the SPID returned by sp_who2 to kill a specific connection as shown.
Usted puede usar KILL para terminar conexiones a una base de datos. Usted puede usar el SPID que regresa sp_who2 para terminar una conexión específica como se muestra.

Test.sql
USE master;
KILL 50;


The sa account

In Microsoft SQL Server the sa account is the System Administrator account. You can connect to a Microsoft SQL Server using this account. By default, this account is disabled. To enable the sa account see the SQL code below.
En Microsoft SQL la cuenta sa es la cuenta del Administrador del Sistema. Usted puede conectarse a un Servidor Microsoft SQL usando esta cuenta. Por defecto, esta cuenta esta deshabilitada. Para habilitar la cuenta sa vea el código de SQL de abajo.

enable_sa.sql
USE master
GO

CREATE LOGIN [sa] WITH PASSWORD = N'123';

ALTER LOGIN [sa] ENABLE;
GO

--ALTER LOGIN [sa] WITH PASSWORD='123Lupita';
--GO


MDF files

A Microsoft SQL Server database is stored in a MDF file. When an SQL file is executed, a MDF file is created or is modified. MDF files are stored in the hard drive and their locations depend on the version of Microsoft SQL Server and folder installation. The location for SQL Express is : C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA
Una base de datos de Microsoft SQL Server es almacenada en un archivo MDF. Cuando un archivo SQL se ejecuta, un archivo de MDF es creado o modificado. Los archivo MDF son almacenados en el disco duro y su ubicación depende de la versión de Microsoft SQL Server y la carpeta de instalación. La ubicación para el SQL Express es: C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

SQLCMD.EXE

It is a command line program that can be used to run SQL scripts in Microsoft SQL Server. The command shown below executes the aeromexico.sql file on the local computer. SQLCMD.EXE is located in the Microsoft SQL Server folder, if you have several versions of Microsoft SQL Server installed, you may have several versions of SQLCMD.EXE.
  1. -E is used to indicate the username and password provided when logging in the computer (Trusted Connection)
  2. -S is used to specified the SQL server (name or IP address)
  3. -i is used to specified the input file
"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd.exe" -E -S localhost\SQLExpress -i aeromexico.sql

Es un programa de comando de línea que puede ser usada para correr scripts de SQL in Microsoft SQL Server. El comando de abajo ejecuta el archivo aeromexico.sql en la computadora local. SQLCMD.EXE está ubicado en la carpeta de Microsoft SQL Server, si usted tiene varias versiones de Microsoft SQL Server instaladas, usted puede tener varias versiones de SQLCMD.EXE.
  1. -E es usado para indicar el nombre de usuario y clave de acceso proporcionados cuando se inició sesión de la computadora (Trusted Connection)
  2. -S es usado para indicar el servidor de SQL (nombre o dirección de IP)
  3. -i es usado para especificar el archivo de entrada
"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd.exe" -E -S localhost\SQLExpress -i aeromexico.sql

Tip
If you do not have Windows Authentication, you need to provide an username and a password to connect to an SQL Server as shown below. In this example the username is sa and the password for this user is 123easy.

"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd.exe" -U sa -P 123easy -S localhost\SQLExpress -i aeromexico.sql


Si usted no tiene Audentificación de Windows, usted necesita proporcionar un nombre de usuario y su clave de acceso para conectarse a un Servidor de SQL como se muestra debajo. En este ejemplo el nombre de usuario es sa y su clave de acceso es 123easy.

"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd.exe" -U sa -P 123easy -S localhost\SQLExpress -i aeromexico.sql


Database Backup

Choose a point in time with little or null activity in the database to perform the backup. The first hours of Sunday (2:00 a.m.) are good choices. Additionally, be sure that the date is not special in terms of database activity for your company.
  1. If you will perform the backup on Sunday, send an email early Friday to notify to the users that the database will not be accessible during the weekend
  2. Use WHO to list the users that are connected to the database
  3. You might use KILL to terminate these connections, if your company policy allows to do so.
  4. Execute the SQL script shown below. Be sure the path exists. In the example below, the backup file will be created in the computer where Microsoft SQL Server is running.
  5. If the backup file was created in the computer where Microsoft SQL Server is running, like in the example, YOU MUST move the file to another computer. Otherwise, in case of hard drive failure, you will lose the database and the backup file.

Escoja un punto en el tiempo con poca actividad o sin actividad en la base de datos para realizar el respaldo. Las primeras horas del Domingo (2:00 a.m.) son buenas opciones. Adicionalmente, asegúrese de que la fecha no sea especial en términos de actividad en la base de datos para su compañía.
  1. Si usted realizará el respaldo el Domingo, envíe un correo el viernes temprano para notificar a los usuarios que la base de datos no estará disponible durante el fin de semana
  2. Use WHO para listar los usuarios conectados a la base de datos
  3. Usted puede usar KILL para terminar estas conexiones, si las políticas de su empresa se lo permiten hacer
  4. Ejecute el script de SQL que se muestra debajo. Asegúrese que la ruta existe. En el ejemplo de abajo, el archivo de respaldo se creará en la computadora dónde Microsoft SQL Server está corriendo
  5. Si el archivo de respaldo fue creado en la computadora donde Microsoft SQL Server está corriendo, como en el ejemplo, USTED DEBE mover el archivo a otra computadora. De otra forma, en caso de fallo en el disco duro, usted perderá la base de datos y el archivo de respaldo.

MyBackup.sql
USE my_database;
GO

--___________________________________________________________________ 1. PREVENT OTHER USERS TO CONNECT
ALTER DATABASE my_database SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
--___________________________________________________________________ 2. BACKUP
BACKUP DATABASE my_database
TO DISK = 'C:\selo\my_database.bak'
WITH FORMAT,
MEDIANAME = 'C_SQLServer_mydatabase',
NAME = 'SQL_mydatabase_22OCT2016';
GO
--___________________________________________________________________ 3. RESTORE ACCESS
ALTER DATABASE my_database SET MULTI_USER


Restore a Database

Use the code below to restore a Microsoft SQL Server database.
Use el código mostrado debajo para restablecer una base de datos de Microsoft SQL Server.

MyRestore.sql
USE master;
GO
RESTORE DATABASE my_database
FROM DISK = 'C:\selo\my_database.bak';
GO


List of SQL Servers

If the SQL Server Browser service is running, you can use sqlcmd.exe to list the names of the SQL Servers in your network.

"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd.exe" -L


Si el servicio de SQL Server Browser está corriendo, usted puede usar sqlcmd.exe para listar el nombre de los Servidores de SQL en su red.

"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd.exe" -L

Tip
To check the name of the instances of Microsoft SQL Server you may check the server registry (regedit.exe):
HKEY_LOCAL_MACHINE > Software > Microsoft > Microsoft SQL Server > Instance Names


Para verificar el nombre de las instancias Microsoft SQL Server usted puede checar el registro en el servidor (regedit.exe):
HKEY_LOCAL_MACHINE > Software > Microsoft > Microsoft SQL Server > Instance Names


Tip
During Microsoft SQL Server installation, be sure to change the account name of the database engine to "LOCAL SERVICE". (The account name by default is ComputerName\SQLExpress and you must select "LOCAL SERVICE").
Durante la instalación de Microsoft SQL Server, asegúrese de cambiar el nombre de la cuenta de la "database engine" a "LOCAL SERVICE". (En nombre de la cuenta por defecto es NombreComputadoa\SQLExpress y usted debe seleccionar "LOCAL SERVICE").

Firewall Configuration

You must change the Firewall Configuration so that you can access remotely Microsoft SQL Server. Open Windows Firewall > Exceptions Tab > Add port or Inbound Rules > New Rule > port. At this point you should add a name, the port number 1433 and the TCP protocol. Using the same procedure add the port 1434 with the UDP protocol. Additionally, in the Exceptions Tab, you must add the programs: sqlservr.exe and sqlbrowser.exe by clicking the "Add Program" button, and then, using the "Browser" button to find these two executable.
Usted debe modificar la configuración Corta Fuegos para que usted pueda accesar en forma remota Microsoft SQL Server. Abra el Firewall de Windows > Pestaña de Exceptiones > Agregar puerto o Reglas de Entrada > Nueva Regla > puerta. En este punto usted debe agregar un nombre el número de puerto 1433 y el protocolo de TCP. Usando el mismo procedimiento agregue el puerto 1434 con el protocolo UDP. Adicionalmente, en la pestaña de Excepciones, usted debe agregar los programas: sqlservr.exe and sqlbrowser.exe haciendo clic en el botón de "Agregar Programa", y entonces, usar el botón "Examinar" para encontrar estos dos ejecutables.

SQL Server Configuration Manager

Select "SQL Server Network Configuration" in the left panel, then, select "Protocols for SQLEXPRESS": enable "Shared Memory", enable "Named Pipes", enable "TCP/IP" and enable "VIA". Select "TCP/IP" and make right click to open the context menu, then select "Properties", in the "IP Addresses" tab in "IP ALL" set the option "TCP Port" to 1433.
Selecciona "SQL Server Network Configuration" en el panel de la izquierda, entonces seleccione "Protocols for SQLEXPRESS": habilite "Shared Memory", habilite "Named Pipes", habilite "TCP/IP" y habilite "VIA". Seleccione "TCP/IP" y haga clic con el botón derecho del ratón para abrir el menú de contexto, entonces selecciones "Propiedades", en la pestaña de "IP Addresses" en "IP ALL" fije la opción "TCP Port" a 1433.

© Copyright 2000-2019 Wintempla selo. All Rights Reserved. Sep 05 2019. Home