Post on 21-Sep-2018
2
SET (Transact-SQL)
SET DATEFORMAT (Transact-SQL) (FECHA Y HORA)
Establece el orden de las partes correspondientes al mes, día y año de una fecha
para interpretar las cadenas de caracteres date, smalldatetime, datetime,
datetime2 y datetimeoffset.
SET DATEFORMAT dmy; GO DECLARE @datevar datetime2 =
'31/12/2008 09:01:01.1234567'; SELECT @datevar; GO
Selecciona el formato dmy
SET DATEFORMAT dmy; GO DECLARE @datevar datetime2 =
'12/31/2008 09:01:01.1234567'; SELECT @datevar; GO
Error
3
SET (Transact-SQL)
SET LOCK_TIMEOUT (INSTRUCCIONES DE BLOQUEO)
Especifica el número de milisegundos que una instrucción
espera a que se libere un bloqueo.
SET LOCK_TIMEOUT 1800
GO
En el ejemplo siguiente se establece el período de tiempo de
espera de bloqueo en 1800 milisegundos.
4
SET (Transact-SQL)
SET LANGUAGE (Transact-SQL) (OTRAS INSTRUCCIONES)
Especifica el entorno de idioma de la sesión. El idioma de la sesión determina los
formatos de datetime y los mensajes del sistema.
DECLARE @Today DATETIME
SET @Today = '12/5/2007'
SET LANGUAGE Italian
SELECT DATENAME(month, @Today) AS 'Month Name'
SET LANGUAGE us_english
SELECT DATENAME(month, @Today) AS 'Month Name'
SET LANGUAGE spanish
SELECT DATENAME(month, @Today) AS 'Month Name'
GO
5
SET (Transact-SQL)
SET CONCAT_NULL_YIELDS_NULL (OTRAS INSTRUCCIONES)
Determina si los resultados de la concatenación se tratan como valores NULL o
como valores de cadena vacía.
PRINT 'Seteando CONCAT_NULL_YIELDS_NULL ON';
GO
SET CONCAT_NULL_YIELDS_NULL ON;
GO
SELECT 'abc' + NULL ;
GO
-- SET CONCAT_NULL_YIELDS_NULL OFF
SET CONCAT_NULL_YIELDS_NULL OFF;
GO
SELECT 'abc' + NULL;
GO
6
SET (Transact-SQL)
SET NOCOUNT (Instrucciones de ejecución de consultas)
Evita que se devuelva el mensaje que muestra el recuento del número de filas afectadas por una
instrucción o un procedimiento almacenado de Transact-SQL como parte del conjunto de resultados.
USE AdventureWorks;
GO
SET NOCOUNT OFF;
GO
-- Muestra el mensaje con el numero de columnas afectadas.
SELECT TOP(5)AddressLine1
FROM Person.Address
WHERE AddressLine1 LIKE 'A%';
GO
-- No Muestra el mensaje con el numero de columnas afectadas.
SET NOCOUNT ON;
GO
SELECT TOP(5)AddressLine1
FROM Person.Address
WHERE AddressLine1 LIKE 'A%';
GO
7
SET (Transact-SQL)
SET FMTONLY (Instrucciones de ejecución de consultas)
Devuelve sólo metadatos al cliente. Se puede usar para probar el formato de la
respuesta sin ejecutar realmente la consulta.
USE AdventureWorks;
GO
SET FMTONLY OFF;
GO
SELECT *
FROM Person.Address
GO
SET FMTONLY ON;
GO
SELECT *
FROM Person.Address
GO
8
SET (Transact-SQL)
SET STATISTICS IO (Estadísticas)
Hace que SQL Server muestre información relacionada con la cantidad de actividad de disco
generada por las instrucciones Transact-SQL.
USE AdventureWorks
SET STATISTICS IO ON; -- Cambiar a OFF
GO
SELECT TOP 1000 [AddressID]
,[AddressLine1]
,[AddressLine2]
,[City]
,[StateProvinceID]
,[PostalCode]
,[rowguid]
,[ModifiedDate]
FROM [AdventureWorks].[Person].[Address]
Las estadísticas se muestran en el campo de mensaje
9
SET (Transact-SQL)
SET STATISTICS TIME (estadísticas)
Muestra el número de milisegundos necesarios para analizar,
compilar y ejecutar cada instrucción.
USE AdventureWorks
SET STATISTICS TIME ON;
GO
SELECT * from Production.ProductCostHistory
where StandardCost < 500.00
GO
SET STATISTICS TIME OFF;
GO
10
SET (Transact-SQL)
SET STATISTICS XML (estadísticas)
Hace que Microsoft SQL Server ejecute instrucciones Transact-SQL y genere información
detallada sobre cómo se ejecutaron las instrucciones en un documento XML definido
correctamente.
USE AdventureWorks
GO
SET STATISTICS XML ON;
GO
-- Primera Consulta
SELECT *
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
-- Segunda consulta.
SELECT *
FROM HumanResources.Employee
WHERE Title LIKE 'Production%';
GO
SET STATISTICS XML OFF;
GO
11
SET TRANSACTION ISOLATION LEVEL (Transacciones)
Controla el comportamiento del bloqueo y de las versiones de fila de las
instrucciones Transact-SQL emitidas por una conexión a SQL Server.
USE AdventureWorks
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
BEGIN TRANSACTION;
GO
SELECT *
FROM HumanResources.EmployeePayHistory;
GO
SELECT *
FROM HumanResources.Department;
GO
COMMIT TRANSACTION;
GO
SET (Transact-SQL)
12
Procedimientos Almacenados Del Sistema
En SQL Server, muchas actividades administrativas e
informativas se pueden realizar mediante los procedimientos
almacenados del sistema. Los procedimientos almacenados
del sistema se agrupan en las categorías que aparecen a
continuación:
Procedimientos almacenados de Active Directory Se utilizan
para registrar instancias de SQL Server y bases de datos de
SQL Server en Active Directory de Microsoft Windows 2000.
Procedimientos almacenados del catálogo Se utilizan para
implementar las funciones del diccionario de datos ODBC y
aislar las aplicaciones ODBC de los cambios en las tablas
subyacentes del sistema.
13
Procedimientos Almacenados Del Sistema
En SQL Server, muchas actividades administrativas e
informativas se pueden realizar mediante los procedimientos
almacenados del sistema. Los procedimientos almacenados
del sistema se agrupan en las categorías que aparecen a
continuación:
Procedimientos almacenados de Active Directory Se utilizan
para registrar instancias de SQL Server y bases de datos de
SQL Server en Active Directory de Microsoft Windows 2000.
Procedimientos almacenados del catálogo Se utilizan para
implementar las funciones del diccionario de datos ODBC y
aislar las aplicaciones ODBC de los cambios en las tablas
subyacentes del sistema.
14
Procedimientos Almacenados Del Sistema
Procedimientos almacenados de cursor Se utilizan para implementar la
funcionalidad de variable de cursor.
Procedimientos almacenados del motor de base de datos Se utilizan para el
mantenimiento general del SQL Server Database Engine (Motor de base de datos
de SQL Server).
Procedimientos almacenados de Correo electrónico de base de datos y SQL Mail
Se utilizan para realizar operaciones de correo electrónico desde una instancia de
SQL Server.
Procedimientos almacenados de planes de mantenimiento de bases de datos Se
utilizan para configurar las tareas de mantenimiento fundamentales necesarias
para administrar el rendimiento de las bases de datos.
Procedimientos almacenados de consultas distribuidas Se utilizan para
implementar y administrar consultas distribuidas.
Procedimientos almacenados de la búsqueda de texto completo Se utilizan para
implementar y consultar índices de texto completo.
Procedimientos almacenados del trasvase de registros Se utilizan para establecer,
modificar y supervisar las configuraciones de trasvase de registros.
Procedimientos almacenados de automatización Permiten habilitar el uso de
objetos de automatización estándar en un lote estándar de Transact-SQL.
15
Procedimientos Almacenados Del Sistema
Procedimientos almacenados de administración basada en directivas Se usan
para la administración basada en directivas.
Procedimientos almacenados de replicación Se utilizan para administrar la
replicación.
Procedimientos almacenados de seguridad Se utilizan para administrar la
seguridad.
Procedimientos almacenados de SQL Server Profiler Lo utiliza SQL Server Profiler
para supervisar el rendimiento y la actividad.
Procedimientos almacenados del Agente SQL Server Los utiliza el Agente SQL
Server para administrar actividades programadas y controladas por eventos.
Procedimientos almacenados de XML Se utilizan para la administración del texto
XML.
Procedimientos almacenados extendidos generales Proporcionan una interfaz de
una instancia de SQL Server a los programas externos para diversas actividades
de mantenimiento.
16
Procedimientos Almacenados Del Catalogo
sp_column_privileges
Devuelve información acerca de los privilegios de columna de una tabla del entorno actual.
USE AdventureWorks;
GO
EXEC sp_column_privileges @table_name = 'Employee'
,@table_owner = 'HumanResources'
,@table_qualifier = 'AdventureWorks'
,@column_name = 'SalariedFlag';.
sp_databases
Enumera las bases de datos que residen en una instancia del SQL Server 2005 Database
Engine (Motor de base de datos de SQL Server 2005) o que están accesibles a través de
una puerta de enlace de la base de datos.
USE master;
GO
EXEC sp_databases;
17
Procedimientos Almacenados Del Catalogo
sp_table_privileges
Devuelve una lista de permisos de tabla (como INSERT, DELETE, UPDATE, SELECT o
REFERENCES) para la tabla o las tablas especificadas.
USE AdventureWorks;
GO
EXEC sp_table_privileges
@table_name = 'Contact%';
sp_stored_procedures
Devuelve una lista de los procedimientos almacenados del entorno actual.
USE AdventureWorks;
GO
EXEC sp_stored_procedures;
18
Procedimientos Almacenados Del Motor de DB
sp_datatype_info
Devuelve información acerca de los tipos de datos que admite el entorno actual.
USE master;
GO
EXEC sp_datatype_info;
GO
sp_clean_db_free_space
Quita la información residual que queda en las páginas de base de datos a causa de las
rutinas de modificación de datos en SQL Server. sp_clean_db_free_space limpia todas las
páginas de todos los archivos de la base de datos.
USE master
GO
EXEC sp_clean_db_free_space
@dbname = N'AdventureWorks' ;
19
Procedimientos Almacenados Del Motor De DB
sp_configure
Muestra o cambia las opciones de configuración global del servidor actual.
En este ejemplo se muestra cómo establecer y enumerar todas las opciones de
configuración. Para ver las opciones de configuración avanzadas, primero hay que
establecer en 1 el valor de show advanced option. A continuación, si se ejecuta sp_configure
sin parámetros, se mostrarán todas las opciones de configuración.
USE master; GO EXEC sp_configure 'show advanced option', '1';
Este es el mensaje: "Se ha cambiado la opción de configuración 'show advanced options' de
0 a 1. Ejecute la instrucción RECONFIGURE para instalar".
ejecutamos RECONFIGURE y se muestran todas las opciones de configuración:
RECONFIGURE;
EXEC sp_configure;
20
sp_who
Proporciona información acerca de los usuarios, sesiones y procesos actuales en una instancia de
SQL Server Database Engine (Motor de base de datos de SQL Server) de Microsoft. La información
se puede filtrar para obtener sólo los procesos que están activos, que pertenecen a un usuario
específico o que pertenecen a una sesión específica.
Mostrar la lista de todos los procesos actuales
En el ejemplo siguiente se utiliza sp_who sin parámetros para informar de todos los usuarios actuales.
USE master;
GO EXEC sp_who;
GO
Mostrar un proceso de un usuario específico
En el ejemplo siguiente se muestra cómo ver información acerca de un usuario actual a partir de su
nombre de inicio de sesión.
USE master;
GO
EXEC
sp_who ‘ejemplo'; --EXEC sp_who 'active'; Todos los procesos activos
GO
Procedimientos Almacenados Del Motor De DB
21
Procedimientos Almacenados Del Sistema
Ejercicio
Utilizando procedimientos almacenados, realizar una copia de la base de datos
AdventureWorks,
22
Procedimientos Almacenados Del Sistema
Solución
use master
GO
EXEC sp_addumpdevice 'disk', 'dispositivo',
'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.MSSQLSERVER2\MSSQL\DATA\dispo
sitivo.bak'
GO
BACKUP DATABASE AdventureWorks
TO dispositivo
WITH FORMAT;
GO
23
What is a Debugger?
“A software tool that is used to detect the
source of program or script errors, by
performing step-by-step execution of application
code and viewing the content of code
variables.”
-MSDN
24
T-SQL Debugging
Un debugger es una herramienta la cual permite observar
desde registros hasta el stack en tiempo real de ejecución,
funciona mediante funciones hook que se unen al kernel
permitiendo manipular los ciclos lógicos del reloj del cpu, para
manejar paso a paso la aplicación que se encuentra
debbugeando.
El debugging de SQL Server permite realizar el trazado o
debuggeo de instrucciones, triggers y procedimientos
almacenados desde el SQL Server development environment,
de igual manera se puede realizar el debugging desde Visual
Studio, sin embargo este proceso se recomienda realizar
desde el mismo SQL Studio.
25
T-SQL DebuggingSe realizara debugging básico del siguiente del siguiente procedimiento
almacenado, creamos el siguiente procedimiento almacenado:
CREATE PROCEDURE Procdebug @in INT,
@out INT out
AS
BEGIN
IF ( @in IS NULL )
SET @in = 0
WHILE ( @in < = 100 )
BEGIN
SET @out = @in
SET @in = @in + 10
PRINT CONVERT(VARCHAR, @in) + ' - ' + CONVERT(VARCHAR, @out)
END
END
26
T-SQL Debugging
Ejecutamos el procedimiento almacenado:
use master
DECLARE @out INT
EXEC Procdebug 1,@out OUTPUT
SELECT @out
El procedimiento declara 2 variables internas de tipo entero: @IN y
@OUT, si @IN es NULL, le asigna el valor ‘0’, entra en un ciclo while
que se detiene cuando @IN es mayor o igual a 100, dentro del ciclo la
variable @out adquiere el valor de @IN y posteriormente @IN se
incrementa en 10 hasta que se cumpla la condición de ser mayor o
igual a 100, los valores de ambas variables se imprimen al final de
cada ciclo.
Para debuggear línea por línea se debe presionar la tecla F11, con
esto se comienza el debug paso por paso, con F10, el debugger
avanza toda una estructura, con F9 se pueden colocar breakpoints.
Los procedimientos almacenados creados se encuentran en:
27
T-SQL Debugging
Una vez comenzado el debugg del procedimiento, se pueden observar los valores de las variables:
en tiempo de ejecución:
28
T-SQL DebuggingEjercicio:Ejercicio:
El siguiente procedimiento almacenado hace uso de la base datos AdventureWorks y lo que
hace es obtener el ID del manager de un empleado, crear el siguiente procedimiento
almacenado:
use AdventureWorks;
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetImmediateManager
@employeeID nchar,
@managerID INT OUTPUT
AS
BEGIN
SELECT @managerID = ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = @employeeID
END
29
T-SQL DebuggingEjercicio:Ejercicio:
Para este procedimiento almacenado se utiliza como base la siguiente consulta:
SELECT ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = '3‘ -- Donde 3 es el ID del empleado (numero variable)
30
Ejercicio:Ejercicio:
El procedimiento almacenado se llama de la siguiente manera:
use AdventureWorks;
DECLARE @out INT
EXEC GetInmediateManager n,@out OUTPUT
SELECT @out
Donde n=parámetro a pasar al procedimiento almacenado.
Cuando el ID es un número pequeño la consulta se realiza sin ningún problema:
T-SQL Debugging
31
T-SQL DebuggingEjercicio:Ejercicio:
Sin embargo cuando el ID es un número mas grande la consulta arroja los siguientes
problemas:
¿Cómo se debe modificar el procedimiento almacenado o la manera de llamarlo, para que el
mismo se ejecute de manera adecuada sin errores?
32
T-SQL DebuggingOtra manera de realizar el Debug de procedimientos almacenados SQL Server es mediante Visual Studio.
A continuación se explicará la manera básica de hacerlo:
Primero se necesita registrar los servidores o instancias de SQL Server a Visual Studio:
Posteriormente se agrega la conexión al actual proyecto
de Visual Studio:
33
T-SQL DebuggingUna vez realizado esto, todos los objetos de la instancia seleccionada serán visibles desde el
Server Explorer, aquí se selecciona el procedimiento almacenado que se desea debuggear:
34
T-SQL Debugging
Una vez hecho esto, el debugging de la
aplicación será posible realizarse desde
VisualStudio.NET
Ahora desde el VisualStudio.NET ya
será posible ejecutar los procedimientos
almacenados:
35
T-SQL DebuggingPara obtener los valores de las variables es posible utilizar la utilidad Quick Watch:
36
What is a Debugger? (con't)
• A debugger is not an IDE
– Though the two can be integrated, they are separate
entities.
• A debugger loads in a program (compiled executable, or
interpreted source code) and allows the user to trace through
the execution.
• Debuggers typically can do disassembly, stack traces,
expression watches, and more.
37
Why use a Debugger?• Flexible
– Allows for “live” error checking – no need to re-write and re-compile
when you realize a certain type of error may be occuring
– Dynamic
– Can view the entire relevant scope
Debugging techniques, 1
• Execution tracing
– running the program
– trace utilities
– single stepping in debugger
– hand simulation
38
Debugging techniques, 2
• Interface checking
– check procedure parameter number/type (if not enforced by compiler) and value
• defensive programming: check inputs/results from other modules– documents assumptions about caller/callee
relationships in modules, communication protocols, etc
• Assertions: include range constraints or other information with data.
• Skipping code: comment out suspect code, then check if error remains.
39
Windows DebuggingDebugger Types
The two basic types of debuggers discussed here are user mode and kernel mode
debuggers.
User Mode Debuggers
The simplest form of a debugger is capable of debugging a single target user mode
(UM) process. User mode debuggers are capable of examining the program state
(running threads, memory content, registers, and kernel objects opened in the
process space) representing the debugger target. The capabilities are similar to
what the target process is capable of doing if it can execute code similar to the
code executed by the debugger.
User mode debuggers are also capable of modifying the state (changing the
thread execution order, changing registers’ content, and changing the memory
content) and being notified of special events happening in the target process. This
scenario is commonly known as live debugging because the debugger can interact
with the debugger target as long as the target process is running.
40
Windows DebuggingUser Mode Debuggers
The simplest form of a debugger is capable of debugging a single target user mode
(UM) process. User mode debuggers are capable of examining the program state
(running threads, memory content, registers, and kernel objects opened in the
process space) representing the debugger target. The capabilities are similar to
what the target process is capable of doing if it can execute code similar to the
code executed by the debugger.
User mode debuggers are also capable of modifying the state (changing the
thread execution order, changing registers’ content, and changing the memory
content) and being notified of special events happening in the target process. This
scenario is commonly known as live debugging because the debugger can interact
with the debugger target as long as the target process is running.
41
Windows Debugging
User Mode Debuggers Windows Examples:
cdb.execdb.exe (CDB) is a character-based console program that enables low-level
analysis of Windows user-mode memory and constructs.
ntsd.exentsd.exe (NTSD) is identical to CDB in every way, except that it spawns a new text
window when started. More precisely, CDB is a console application, whereas
NTSD is a GUI application that can create its own console.
windbg.exewindbg.exe (WinDbg) is a powerful graphical interface debugger with the same
debugging capabilities found in console mode debuggers, enhanced to automate
routine tasks such as examine the current call stack, view variables (including C++
objects), show the current registers, and a lot more.
42
Windows Debugging
Kernel Mode Debuggers
In contrast to user mode debuggers, kernel debuggers can inspect the computer system as a
whole, with nearly the same view as the system processor. For kernel debuggers, each
process or thread is just a collection of data structures, the memory addresses have a direct
relation with the physical memory installed on the system, and the paged out memory is not
accessible without loading it in the physical memory. The kernel mode debugger can change
the state of the entire computer and can be notified of special events. This model of
debugging is known as live kernel debugging.
Kernel debuggers are mainly used by device driver developers, but they can also
be very useful when debugging user mode applications. Several scenarios described in this
book make use of the kernel mode debuggers, even if the debugged code runs entirely in
user mode.
43
Windows Debugging
Kernel Mode Debuggers Windows Examples:
kd.exekd.exe (KD) is the kernel mode character-based debugger. It enables in-depth
analysis of kernel-mode activity on Windows and can be used to debug kernel
mode programs and drivers, to debug user mode applications, or to monitor the
behavior of the operating system itself.
windbg.exewindbg.exe (WinDbg) is also capable of kernel mode debugging. WinDbg provides
full source-level debugging for the Windows kernel, kernel-mode drivers, as well as
user mode applications running on the system. It allows you to debug any
application or kernel module in a friendly user interface by tracing the source code,
setting breakpoints based on the source content, and much more.
47
The Future of Debugging
• better debuggers and programs to help you
visualize your programs state
• simple model checkers
• programs keep getting bigger, finding bugs is going
to get harder!
• Parallel/distributed debuggers as we move to more
parallel/distributed systems.
48
Objetos AvanzadosCuadro de diálogo Propiedades de
conexión
Utilice este cuadro de diálogo para ver
las propiedades de la conexión actual.
Este cuadro de diálogo está disponible
cuando se hace clic en Ver
propiedades de conexión en varios
cuadros de diálogo del Explorador de
objetos. Las propiedades que
aparecen en esta página son de sólo
lectura.
Para cambiar propiedades como, por
ejemplo, Base de datos, conéctese a la
base de datos deseada con el
Explorador de objetos antes de abrir el
cuadro de diálogo Propiedades de
conexión.