0% encontró este documento útil (0 votos)
7 vistas18 páginas

Estándares de Programación SQL

El documento establece estándares para la programación en SQL, incluyendo la creación y modificación de procedimientos almacenados, triggers y vistas, así como la creación de tablas y la gestión de índices. Se enfatiza la importancia de la legibilidad del código, el uso de comentarios, y la optimización del rendimiento evitando prácticas ineficientes. Además, se detallan recomendaciones sobre seguridad, replicación y el manejo de datos en formato XML.

Cargado por

Leumas Solis
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas18 páginas

Estándares de Programación SQL

El documento establece estándares para la programación en SQL, incluyendo la creación y modificación de procedimientos almacenados, triggers y vistas, así como la creación de tablas y la gestión de índices. Se enfatiza la importancia de la legibilidad del código, el uso de comentarios, y la optimización del rendimiento evitando prácticas ineficientes. Además, se detallan recomendaciones sobre seguridad, replicación y el manejo de datos en formato XML.

Cargado por

Leumas Solis
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Estándares de

Programación SQL
Estándares de Programación de SQL

Tabla de Contenido

Objetivo del Documento......................................................................................................................................... 3


Definiciones, Acrónimos y Abreviaciones............................................................................................................... 3
Referencias............................................................................................................................................................ 3
Creación o Modificación de SPs, Triggers, Vistas.................................................................................................. 3
Creación Tablas..................................................................................................................................................... 5
Campo FechaUltimaModificacion....................................................................................................................... 5
Comentarios en Procesos...................................................................................................................................... 5
Sentencias Básicas (Select, Insert, Update, Delete).............................................................................................. 7
Acceso a información de otras BDs........................................................................................................................ 9
Flujos de Procesos............................................................................................................................................... 10
Índices y Llaves Primarias.................................................................................................................................... 10
Tablas Temporales............................................................................................................................................... 10
Seguridad............................................................................................................................................................. 10
Objetos Básicos (Tablas, Vistas, SPs).............................................................................................................. 11
Cuentas Genéricas para Aplicaciones.............................................................................................................. 11
Cuentas Genéricas para Procesos................................................................................................................... 11
Linked Servers.................................................................................................................................................. 11
Replicación........................................................................................................................................................... 12
Objetos a Publicar............................................................................................................................................. 12
Tablas............................................................................................................................................................... 12
Triggers............................................................................................................................................................. 12
Stored Procedures, Vistas y Funciones............................................................................................................ 13
Publicación de objetos en ambiente de replicación.......................................................................................... 13
Registrar objeto en el catalogo de objetos de replicación.............................................................................13
Cambiar el tipo de replicación para una Tabla.............................................................................................. 14
Quitar un objeto de una publicación.............................................................................................................. 15
Agregar nuevamente a una publicación un objeto que anteriormente ya había sido publicado....................16
Objetos encriptados.......................................................................................................................................... 17
Restricciones por IDENTITYs........................................................................................................................... 17
Recomendaciones................................................................................................................................................ 17
Uso de Variables Tipo Tabla............................................................................................................................. 17
Historia del Documento(*)..................................................................................................................................... 19
Historia del Formato (*)......................................................................................................................................... 19

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
2
Estándares de Programación de SQL

Objetivo del Documento


El objetivo del documento es presentarle al área de construcción los lineamientos para la creación de procesos
que se ejecutarán en las diversas Bases de datos actuales y nuevas de SQL.

Definiciones, Acrónimos y Abreviaciones


No Aplica

Referencias
GYC_CON_EstandaresNomenclaturaSQL.doc

Creación o Modificación de SPs, Triggers, Vistas


 Al crear un objeto (sp, vista, tabla, etc.) no se debe de poner la instrucción que elimina el objeto en caso de
existir, ya que esto puede eliminar objetos existentes que no se contemplaron en el proyecto y afectarían
otros proyectos o aplicaciones. El script solo debe de contener las instrucciones necesarias para la creación
del objeto nuevo.

create procedure [Owner].[Nombre del Stored Procedure]


[Nombre Param1] [Tipo]
as
.
.

 Para modificar un Objeto existente se debe utilizar la instrucción alter <Tipo Objeto> <Objeto> para
asegurar que se está modificando un objeto existente.

alter procedure [Owner].[Nombre del Stored Procedure]


[Nombre Param1] [Tipo]
as
.
.

 La declaración de Variables se debe de hacer al principio, para darle legibilidad al código.

 Utilizar set nocount on al inicio un grupo o “batch” de instrucciones, “stored procedures”, “triggers” o
“funciones”. Estas instrucciones eliminarán los mensajes de número de registros afectados posteriores a la
ejecución de instrucciones como: select, insert, update, delete aumentando el desempeño de los “stored
procedures” al disminuir la cantidad de información transmitida por la red.

 Eliminar las sentencias de prueba que se utilizan durante el desarrollo o modificación de objetos (sentencias
select, print). Ya que generan resultados (resultsets) y tráfico de red innecesarios.

Ejemplo:

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
3
Estándares de Programación de SQL

-- Incorrecto
PRINT @Endoso

SELECT @Endoso

 Los parámetros y las variables que se declaren dentro de los objetos deberán ser del mismo tipo de dato y
longitud del campo al cual hacen referencia, esto para evitar errores de desbordamiento.

 Evitar el uso de ciclos y cursores, abordar los desarrollos utilizando teoría de conjuntos y no hacerlo registro
a registro, ya que el motor de base de datos esta optimizado para trabajar con conjuntos de registros,
apoyarse de las funciones diseñadas para tal fin, como son COMMON TABLE EXPRESSIONS (CTE),
USER DEFINED FUNCTIONS (UDF), APPLY. Son excepcionales los casos donde no se puede evitar el
uso de ciclos, tales casos deberán evaluarse por el área de arquitectura de datos

 Para el manejo de información en formato XML dentro de los objetos de base de datos se debe utilizar
XQuery en lugar de OPENXML, ya que el uso de OPENXML utiliza demasiados recursos de memoria para
su ejecución al separar 1/8 parte de la memoria del servidor solamente para dicho proceso,
independientemente del tamaño del documento XML.

Ejemplo:

-- Incorrecto

EXEC sp_xml_preparedocument @idoc OUTPUT, @xmlCoberturasValidar

SELECT CoberturaId, SumaAseguradaBase


FROM OPENXML( @idoc, N'/Coberturas/Cobertura',1)
WITH (CoberturaId int,
SumaAseguradaBase money)

EXEC sp_xml_removedocument @idoc

-- Correcto

SELECT [Link]('./@CoberturaId[1]','int') AS CoberturaId,


[Link]('./@SumaAseguradaBase[1]','varchar(64)') AS SumaAseguradaBase
FROM @[Link]('//Deducible') AS Tabla(columna)

Creación Tablas
 En la creación de tablas físicas es necesario que se especifique una llave primaria o índice único. Para
proteger la integridad de datos y optimización en el acceso a estos.

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
4
Estándares de Programación de SQL

 Tanto en la creación de tablas físicas como en las temporales se deberá especificar si los campos
contenidos en estas permitirán valores nulos o no.

 No se debe de especificar el COLLATION de los campos, ya que se debe de tomar el que este definido por
defecto en la Base de Datos.

 Se debe crear un índice agrupado (CLUSTERED), para asegurar que las tablas crezcan con el orden
definido por dicho índice y los índices no agrupados (NONCLUSTERED) proporcionen un mejor desempeño
al hacer referencia hacia el índice agrupado.

 Se debe evitar la creación de columnas que almacenen descripciones de campos que existan en otras
tablas y los cuales se pueden obtener a través de llaves foráneas.(por ejemplo, descripciones de
catálogos), ya que con esto se incrementa el espacio de almacenamiento innecesariamente y va en contra
de las reglas de normalización.

 Se deben crear llaves foráneas cuando exista relación entre dos o más tablas a través de un campo a fin de
garantizar la integridad referencial y la homogeneidad en cuanto al tipo y longitud de los campos.

Campo FechaUltimaModificacion
Es necesario que toda tabla maneje el campo FechaUltimaModificacion y un trigger que mantenga actualizado
este campo en altas y actualizaciones, ya que los procesos de DWH por medio de este campo mantienen
actualizadas las BDs requeridas para el análisis de la información

Las propiedades del campo son las siguientes

Nombre: FechaUltimaModificacion
Tipo: Datetime

Las Características del Trigger son las siguientes

Nombre: Apegarse al estándar de nomenclatura (Documento de estándares de nomenclatura de


SQL)
Tipo: Eventos capturados son INSERT y UPDATE
Actividad: Solo debe de actualizar el campo FechaUltimaModificacion con la fecha del servidor al
momento de que el trigger sea ejecutado

Excepciones:

Las tablas que quedan exentas a este campo son aquellas que por la naturaleza del proceso en que se
encuentren se estén depurando constantemente, o aquellas que se utilicen solo para manejo de información de
forma masiva.

Comentarios en Procesos
 Se debe de comentarizar tanto las creaciones de nuevos sps, triggers y vistas, como los cambios que
sufren estos, para tener una referencia de de la historia del objeto.

Para la creación de nuevos objetos se necesita la siguiente información:


Ejemplo de Sp:

create procedure [Owner].[Nombre del Stored Procedure]

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
5
Estándares de Programación de SQL

[Nombre Param1] [Tipo],


[Nombre Param2] [Tipo]
as
/************************************************************************************************/
/* Nombre Fisico: [dbo].[Nombre del Stored Procedure] */
/* Autor: [Nombre del Autor] */
/* Fecha: [Dia/Mes/Año de Creación] */
/* Proyecto: [Numero y Nombre del proyecto] */
/* Descripcion: [Explicación corta del procedimiento] */
/* Producto [Nombre del producto al que esta asociado el documento] */
/* Version [Numero de version del Stored Procedure] */
/************************************************************************************************/
.
.

...para las vistas, triggers, funciones aplicaría de la misma forma.

Para la modificación de objetos existentes se necesita la siguiente información y deberá ir enseguida de los
comentarios del ultimo cambio de existir este o comentarios de la creación del objeto.
Ejemplo de Sp:

alter procedure [Owner].[Nombre del Stored Procedure]


[Nombre Param1] [Tipo],
[Nombre Param2] [Tipo]
as
/************************************************************************************************/
/* Nombre Fisico: [dbo].[Nombre del Stored Procedure] */
/* Autor: [Nombre del Autor] */
/* Fecha: [Dia/Mes/Año de Creación] */
/* Proyecto: [Numero y Nombre del proyecto] */
/* Descripcion: [Explicación corta del procedimiento] */
/* Producto [Nombre del producto al que esta asociado el documento] */
/* Version [Numero de version del Stored Procedure] */
/************************************************************************************************/
/* Autor: [Nombre del Autor de la modificación] */
/* Fecha: [Dia/Mes/Año de modificación] */
/* Proyecto: [Nombre del proyecto para el que se hace la modificación] */
/* Descripcion: [Explicación corta de la modificación] */
/* Version [Numero de version del Stored Procedure] */
/************************************************************************************************/
.
.

...para las vistas, triggers, funciones aplicaría de la misma forma.

 Se debe de Comentarizar cada parte del flujo de los sps que realicen más de una instrucción, para darle
legibilidad al código. Ejem:

.
.
-- Obtener los Recibos emitidos en un periodo de Fechas determinado.
insert #tmpRecibos(ClaveId, PolizaId, IncisoId, EndosoId, Recibo)
select ClaveId, PolizaId, IncisoId, EndosoId, Recibo
from Recibo
where EmisionFecha >= @FechaDesde and EmisionFecha < @FechaHasta

-- Borra los recibos que no han sido pagados.


delete i
from #tmpRecibos t inner join Recibo i
on [Link] = [Link] and [Link] = [Link]
and [Link] = [Link]

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
6
Estándares de Programación de SQL

where [Link] is null


.
.
.

Estos comentarios cambian de acuerdo al código y no generarán historia.

Sentencias Básicas (Select, Insert, Update, Delete).


 No se debe utilizar SELECT *, en su lugar es necesario listar todas las columnas que se desea obtener,
esto mejora el tiempo de acceso a los datos y el tiempo que estos tardarán en transmitirse por la red.

 Al insertar datos en una tabla se deben de especificar que campos son los que se van a manejar en la
inserción, para que en futuros cambios a la estructura de esta no afecte los procesos actuales.

Ejem:
Insert Tabla (Campo1, Campo2, Campo3)
Select Campo1, Campo2, Campo3
From Tabla2

 No se deben de utilizar los números de las columnas en la cláusula de ORDER BY, esto puede causar
confusiones y errores si la estructura de la base de datos cambia. En su lugar siempre se debe usar el
nombre de la columna.

Ejemplo:

-- Incorrecto
select PedidoID, FechaPedido
from Pedidos
order by 2

-- Correcto
select PedidoID, FechaPedido
from Pedidos
order by FechaPedido

 Utiliza el estándar ANSI para las sentencias básicas. Con el estándar ANSI la cláusula WHERE se utiliza
solamente para el filtrado de datos a diferencia de la notación antigua donde la cláusula de WHERE se
utiliza tanto para el filtrado de datos como para el manejo de las condiciones del JOIN.

Ejemplo:
-- Incorrecto
Select [Link], [Link]
From Publicaciones P, Autores A, PublicacionesAutores PA
Where [Link] = [Link] and [Link] = [Link]
and [Link] LIKE '%Computadora%'

-- Correcto
select [Link], [Link]
from Autores A
inner join PublicacionesAutores PA
on [Link] = [Link]
inner join Publicaciones P
on [Link] = [Link]

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
7
Estándares de Programación de SQL

where [Link] LIKE '%Computadora%'

En lugar de los caracteres *= y =*, se deben utilizar LEFT y RIGTH joins que son el estándar de ANSI. Los
caracteres comodín para expresar este tipo de joins no serán soportada en las siguientes versiones de SQL.

 No se deben utilizar directamente estatutos de SELECT, INSERT, UPDATE o DELETE desde las
aplicaciones. En vez de esto se deben crear “stored procedures” y darle permiso a las aplicaciones para
ejecutarlos. Esto permite un acceso a los datos más limpio así como mantener la consistencia a través de
los diferentes módulos de la aplicación y centralizar la lógica de negocios en la base de datos.

 En caso de manejar diferentes “owners” de los objetos de base de datos, agregar el “owner” del objeto
como prefijo, esto aumenta la legibilidad del código.

Ejemplo:

Select t1.Campo1, t2.Campo2


From Tabla1 t1 inner join Propietario.Tabla2 t2
On [Link] = [Link]

 Cuando se realice un query que involucre dos o mas tablas, se deberá especificar en cada campo el alias
de la tabla a la que pertenece.

Ejemplo:
--Correcto
Select t1.Campo1, t2.Campo2
From Tabla1 t1 inner join Propietario.Tabla2 t2
On [Link] = [Link]

 No se debe utilizar la clausula ORDER BY en la inserción de registros, ya que el motor de base de datos no
garantiza que los registros se inserten en el orden indicado.
 No se deben manipular las columnas que están contenidas en la sección posterior al WHERE con (ISNULL,
DATEPART, DATEDIFF, etc), ya que este tipo de manipulaciones evita que se utilicen los índices definidos
para esos campos.

Ejemplo:

-- Incorrecto

SELECT PolizaId, ClaveId, IncisoId


FROM Recibo
WHERE PolizaId = @PolizaId
AND DATEDIFF(day, InicioVigencia, @FechaEndoso) = 0

--- Correcto

SELECT PolizaId, ClaveId, IncisoId


FROM Recibo
WHERE PolizaId = @PolizaId
AND InicioVigencia >= @FechaEndoso
AND InicioVigencia < (@FechaEndoso + 1)

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
8
Estándares de Programación de SQL

Acceso a información de otras BDs


Para obtener información de otra BDs se debe de considerar lo siguiente.

 Se puede hacer el uso del “.[owner].” Comúnmente conocido como “..” en las sentencias básicas o
ejecución de SPs en los cuales intervenga una BD diferente a la actual, siempre y cuando la relación entre
estas BD se encuentre especificada en la lista de relaciones de BDs abajo mencionada.

Sintaxis: [BD] + “.” + [Owner] + “.” + [Obejto]

Ejem: para obtener información de la BD de Cartera estando en la BD de Auto se puede hacer de


manera directa.
Select t1.Campo1, t1.Campo2, [Link], [Link]
From Tabla1 t1 inner join [Link].Tabla2 t2
On t1.Camp3 = [Link]
Where t1.Campo1 = N

 Para obtener información de una relación que no se encuentre en la lista de relaciones de BDs se debe de
hacer mediante los Linked Servers haciendo uso de vistas o SPs

Sintaxis: [LinkedServer] + “.” + [BD] + “.” + [Owner] + “.” + [Objeto]

Ejemplos:
o Obtener información de la vista vwPoliza de la BD local de Auto

SELECT top 10 [Link], [Link]


FROM LSLOCAL_AUT.[Link] p
WHERE UsuarioId = @Usuario

o Obtener información de la vista vwSiniestro de la BD Siniestro del servidor de México

SELECT top 10 [Link], [Link]


FROM LSMEX_SIN.[Link] s
WHERE UsuarioId = @Usuario

Lista de Relaciones de BDs

BD Local BD Remota
Cartera Auto
Diverso Auto
Auto Caja
Diverso Caja
Cartera Caja
Siniestro Caja
Seguimiento Caja
Contacto Caja
Reaseguro Caja
Auto Cartera
Diverso Cartera
OficinaVirtual Corporativo
Auto Diverso
Cartera Diverso
Reaseguro Diverso

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
9
Estándares de Programación de SQL

Corporativo OficinaVirtual
Diverso Reaseguro
Auto Seguro
Diverso Seguro
Cartera Seguro
Siniestro Seguro
Caja Seguro
Seguimiento Seguro
Contacto Seguro
Reaseguro Seguro
Auto Siniestro
Diverso Siniestro
Cartera Siniestro
Reaseguro Siniestro
Seguimiento Siniestro

Flujos de Procesos
 No utilizar la instrucción GOTO. Este tipo de instrucciones puede hacer al código menos legible.

Índices y Llaves Primarias


 Generar índices solo para llaves primarias, y llaves foráneas.
- Para cualquier otro caso, deberá ser justificado y asegurarse que se utilice.

Tablas Temporales
 La creación de tablas temporales al igual que la declaración de variables se deben de hacer al principio del
sp, ya que al estar dispersas en el sp puede provocar la recompilación del objeto.

 Al terminar de usar una tabla temporal se deberá liberar los recursos que esta utilice mediante la sentencia
drop table #Tabla, ya que de no hacerlo los recursos no se liberan hasta cerrar la cesión.

Seguridad

Objetos Básicos (Tablas, Vistas, SPs)

 Las tablas deberán ser accesadas por medio de SPs o Vistas, no se deberá dar acceso directamente a
la tabla.

 No se deberá dar permisos al rol PUBLIC de SQL para el acceso a los objetos, las aplicaciones y/o
procesos deberán estar asociadas a roles de Base de Datos generados para ello.

Cuentas Genéricas para Aplicaciones

 Las cuentas genéricas de aplicaciones por ningún motivo deberán ser propietarias de la base de datos,
así como tampoco administradoras de SQL

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
10
Estándares de Programación de SQL

 Se deben otorgar permisos vía objetos (esquemas ó cada objeto) en LAS TABLAS no se debe otorgar
ningún permiso ya que debemos accederlas vía Stored Procedures, Vistas, Triggers.

 Deben existir roles en SQL server por BD y debemos asociar la o las cuentas genéricas a estos

 Por BD deben existir roles y cuentas para administrador, consultas, y registro de información con menor
privilegio a un administrador

Cuentas Genéricas para Procesos

 Las cuentas genéricas de procesos por ningún motivo deberán ser administradoras de SQL

 Las cuentas definidas para procesos son las siguientes:

o LMGR
Cuenta para ejecutar reportes nocturnos (Procesos SQT, SQR, Reportes usando Scripts SQL)

o DTSMGR
Cuenta para las conexiones a las BDs de SQL que son accesadas por los procesos operativos

o OPERADWH
Cuenta para las conexiones a las BDs de SQL que son accesadas por los procesos ETL de BI

 Estas cuentas estarán cambiando de password cada 3 meses

 El rol responsable de la administración de estas cuenta es Arquitectura de Datos.

Linked Servers

 La configuración de Seguridad para los Linked servers es la siguiente:

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
11
Estándares de Programación de SQL

 Para ejecutar procesos que hagan uso de linked servers se tendrá que hacer mediante la cuenta
genérica que utilice la aplicación, reporte procesos operativo.

 Importante: El uso de las cuentas administradoras o cuentas que no sean las que utiliza el proceso en
producción, generarán riesgos y/o re trabajos por no contar con los privilegios requeridos para su
ejecución.

 No se debe de hacer uso de manera directa a las tablas mediante Linked Servers, Revisar el apartado
“Acceso a información de otras BDs” del documento de estándares de programación de SQL
(GYC_CON_EstandaresProgramacionSQL.doc), ya que requerirán que se asignen permisos
directamente a las tablas.

Replicación

Objetos a Publicar
Es responsabilidad del equipo responsable del cambio el identificar y revisar con el negocio que objetos
deberán ser replicados o no dada su importancia en el proceso afectado

Tablas
Las tablas que requieran ser replicadas por el mecanismo de replicación de SQL deberán contar con una llave
primaria.

Las tablas a replicar son aquellas que mantendrán historia; aquellas que se requieran estar depurando por la
naturaleza del proceso (tablas temporales o de paso en algún proceso) pero que se requieran para realizar
alguna función en el ambiente de replicación solo se replicará la estructura.

Triggers
Para la liberación de triggers nuevos o cambios en ellos se tiene que especificar la cláusula Not For
Replication como se muestra a continuación:
Create Trigger [Link]
On [Link]
For Update
Not For Replication
As ...

Esto con la finalidad de que no se ejecute cuando se está transfiriendo la información por medio de la
replicación

Stored Procedures, Vistas y Funciones


Los Stored Procedures, Triggers o Vistas que se requieran replicar no requieren algún ajuste especial, solo
cuando son objetos nuevos se deberán de registrar como artículos a publicar en la replicación. Revisar
“Publicación de objetos en ambiente de replicación”

Una vez con la estructura de la tabla establecida y/o los SPs, triggers o vistas que se requieran replicar, se
deberán poner en contacto con el responsable del ambiente de replicación para que estos objetos sean
contemplados por el proceso de replicación a utilizar.

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
12
Estándares de Programación de SQL

Publicación de objetos en ambiente de replicación


Cada servidor de Base de Datos de SQL cuenta con una BD llamada OPERACION, en esta base de datos se
ha creado una estructura de datos en el esquema REPLICA para llevar el control de los objetos que se
requieran replicar.

Todas las sentencias para publicar los objetos se manejarán en un archivo adicional por base de datos
afectada, estas sentencias serán ejecutadas en la Base de Datos OPERACION en el servidor de datos donde
se encuentran los objetos que fueron liberados

A continuación se detallan las funciones con las que se cuenta para publicar objetos en el ambiente de
replicación

Registrar objeto en el catalogo de objetos de replicación.


Este procedimiento almacenado permite registrar en el catalogo de objetos de replicación un nuevo objeto
liberado en alguna de las bases de datos habilitadas para Replicación Transaccional. Los objetos que se
pueden registrar son:

 Tablas
 Procedimientos almacenados
 Funciones de usuario
 Vistas

Sintaxis

[Link] [@DBName = ] ‘Database’


,[@SchemaName = ] ‘Schema’
,[@ObjetcName = ] ‘Object’
,[@ReplType = ] Type

Argumentos

[DBName = ] ‘Database’

Es el nombre de la base de datos a la que pertenece el objeto a registrar. Database es de tipo


nvarchar(256) sin valor de default.

[@SchemaName = ] ‘Schema’

Es el nombre del esquema al que pertenece el objeto a registrar. Schema es de tipo nvarchar(256) sin
valor de default.

[@ObjetcName = ] ‘Object’

Es el nombre del objeto que se desea registrar. Object es de tipo nvarchar(256) sin valor de default.

[@ReplType = ] Type

Es el tipo de replicación a configurar para el objeto que se va a registrar. Type es de tipo tinyint sin valor
de default. Valores permitidos:

Valor Descripción
0 No se replica ni estructura ni datos.

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
13
Estándares de Programación de SQL

1 Replica Transaccional de SQL Server. (Estructura y datos)


2 Se replica solamente la estructura sin datos.

Para Procedimientos Almacenados, Funciones y Vistas solo se puede utilizar el valor 1. Para Tablas los valores
0, 1 y 2.

Notas

 Este procedimiento almacenado se encuentra en la base de datos Operación.


 El objeto debe existir en su correspondiente base de datos y esquema antes de poder ser registrado.

Valores de código de retorno.

0 (Correcto) ó 1 (Error).

Ejemplo

Exec [Link] N’Auto’, N’dbo’, N’Agente’, 1

Cambiar el tipo de replicación para una Tabla.


Este procedimiento almacenado permite cambiar el tipo de replicación configurado para una Tabla.

Sintaxis

[Link] [@DBName = ] ‘Database’


,[@SchemaName = ] ‘Schema’
,[@ObjetcName = ] ‘Object’
,[@NewReplType = ] Type

Argumentos

[DBName = ] ‘Database’

Es el nombre de la base de datos a la que pertenece el objeto a modificar. Database es de tipo


nvarchar(256) sin valor de default.

[@SchemaName = ] ‘Schema’

Es el nombre del esquema al que pertenece el objeto a modificar. Schema es de tipo nvarchar(256) sin
valor de default.

[@ObjetcName = ] ‘Object’

Es el nombre del objeto que se desea modificar. Object es de tipo nvarchar(256) sin valor de default.

[@NewReplType = ] Type

Es el nuevo tipo de replicación a configurar para el objeto. Type es de tipo tinyint sin valor de default.
Valores permitidos:

Valor Descripción
0 No se replica.
1 Se replica a través de Replica Transaccional de SQL Server.

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
14
Estándares de Programación de SQL

2 Solo se replica la estructura del objeto.

Solo aplica para objetos tipo Tabla.

Notas:

 Este procedimiento almacenado se encuentra en la base de datos Operación.


 El objeto debe existir en su correspondiente base de datos y esquema antes de poder ser modificado.
 El nuevo tipo de replicación debe ser diferente al actual.

Valores de código de retorno.

0 (Correcto) ó 1 (Error).

Ejemplo

Exec [Link] N’Auto’, N’dbo’, N’Agente’, 2

Quitar un objeto de una publicación.


Este procedimiento almacenado permite quitar de una publicación de Replica Transaccional de SQL Server un
objeto determinado. El objeto solamente se remueve de la publicación, si desea eliminar el objeto de la base de
datos deberá utilizar la instrucción DROP.

Sintaxis

[Link] [@DBName = ] ‘Database’


,[@SchemaName = ] ‘Schema’
,[@ObjetcName = ] ‘Object’

Argumentos

[DBName = ] ‘Database’

Es el nombre de la base de datos a la que pertenece el objeto que se desea quitar. Database es de tipo
nvarchar(256) sin valor de default.

[@SchemaName = ] ‘Schema’

Es el nombre del esquema al que pertenece el objeto que se desea quitar. Schema es de tipo
nvarchar(256) sin valor de default.

[@ObjetcName = ] ‘Object’

Es el nombre del objeto que se desea quitar. Object es de tipo nvarchar(256) sin valor de default.

Notas

 Este procedimiento almacenado se encuentra en la base de datos Operación.

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
15
Estándares de Programación de SQL

 El objeto debe existir en su correspondiente base de datos y esquema, así como pertenecer a una de
las publicaciones de Replica Transaccional de SQL Server.
 El quitar un objeto de su publicación no requiere la generación de snapshot.

Valores de código de retorno.

0 (Correcto) ó 1 (Error).

Ejemplo

Exec [Link] N’Auto’, N’dbo’, N’Agente’

Agregar nuevamente a una publicación un objeto que anteriormente ya había sido publicado.
Este procedimiento almacenado permite agregar nuevamente a una publicación de Replica Transaccional de
SQL Server un objeto que haya sido removido a través del procedimiento almacenado:
[Link].

Sintaxis

[Link] [@DBName = ] ‘Database’


,[@SchemaName = ] ‘Schema’
,[@ObjetcName = ] ‘Object’

Argumentos

[DBName = ] ‘Database’

Es el nombre de la base de datos a la que pertenece el objeto que se desea volver a publicar. Database
es de tipo nvarchar(256) sin valor de default.

[@SchemaName = ] ‘Schema’

Es el nombre del esquema al que pertenece el objeto que se desea volver a publicar. Schema es de
tipo nvarchar(256) sin valor de default.

[@ObjetcName = ] ‘Object’

Es el nombre del objeto que se desea volver a publicar. Object es de tipo nvarchar(256) sin valor de
default.

Notas

 Este procedimiento almacenado se encuentra en la base de datos Operación.


 El objeto debe existir en su correspondiente base de datos y esquema.
 Previamente el objeto tuvo que estar publicado en alguna publicación de Replica Transaccional de SQL
Server y posteriormente haber sido eliminado a través del procedimiento almacenado
[Link].

Valores de código de retorno.

0 (Correcto) ó 1 (Error).

Ejemplo

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
16
Estándares de Programación de SQL

Exec [Link] N’Auto’, N’dbo’, N’Agente’

Objetos encriptados
Los objetos que requieran ser encriptados no se podrán replicar de manera automática, estos objetos deberán
de notificarse al responsable del ambiente de replicación, ya que se tendrán que liberar de manera manual en
ambos ambientes.

Restricciones por IDENTITYs


El uso de IDENTITYs no está permitido, salvo casos especiales, previa revisión y aprobación con el
responsable de diseño y desarrollo, en estas situaciones la restricción sobre el este campo es que no puede ser
TINYINT, el tipo de dato para este campo deberá de ser por lo menos SMALLINT.

Importante:
En el caso de hacer uso de IDENTITYs la función para capturar el valor utilizado en un registros es
SCOPE_IDENTITY(), ya que el uso de @@Identity puede devolver datos incorrectos.

Recomendaciones

Uso de Variables Tipo Tabla

 Evitar el uso de variables tipo tabla en procesos cuando estas almacenen una cantidad considerable de
información y se realicen joins con otras tablas, ya que el performance se ve degradado de manera
considerable.

Para contemplar el uso de estos objetos se debe de realizar pruebas de desempeño exhaustivas para
evitar problemas de performance en las aplicaciones.

 Evitar el uso del hint WITH RECOMPILE en la creación de Stored Procedures, ya que dicho hint evita
que el motor de base de datos reutilice los planes de ejecución existentes para dicha consulta, lo cual
hace que se afecte el desempeño de objeto.

 Evitar el uso del query hint WITH INDEX, ya que evita que el motor de base de datos tome la mejor
opción de índice (inclusive puede no tomar en cuenta los índices) de acuerdo a las estadísticas,
distribución, cardinalidad, etc, de los datos.

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
17
Estándares de Programación de SQL

Historia del Documento(*)


En esta sección se lleva un control de las modificaciones que ha sufrido este documento.

Versión Autor Solicitante Descripción Fecha


1.0.0 Dora Elia Obeso ADYM Estándares y recomendaciones para desarrollo en SQL Server 2000. 17/Sep/03
Montoya
1.1.0 Rogelio Flores ADYM Se modifico la parte de nomenclaturas. 28/Oct/03
1.2.0 Abraham Orozco. ADYM Se corrigieron los ejemplos 14/Jun/04
2.0.0 Félix García Cruz ADYM Se dividieron en los siguientes documentos en: 04/Ago/05
Estándares de Nomenclaturas
Estándares de Programación
Estándares de Seguridad
Mejores prácticas.
Y se modificaron algunos estándares y se especificaron nuevos
2.00.01 Ricardo Clemente Comité Cadena Se formateo al Estándar de los Productos de Trabajo de Cadena de 25/Ene/06
Valor Valor
2.01.00 Félix García Cruz ADYM Se agregó lo referente al acceso a información de BDs remotas 08/Jun/2006
2.03.00 Félix García ADyM Collation en creación de tablas y se agregan las secciones seguridad 03/Oct/2008
y Recomendaciones
2.03.01 Félix García [Link] Se agrega la restricción de uso del rol Public de SQL 19/08/2009
2.04.01 Félix García Arq. Datos Se agrega la sección de Replicación 02/10/2009
2.04.02 Félix García Arq. Datos Se cambia la tabla de publicaciones para manejar una sola lista de 05/10/2009
publicaciones
2.05.01 Félix García Arq. Datos Se cambio el tipo de réplica en producción (de Merge a 09/01/2010
Transactional)
2.05.02 Felix Garcia Arq. Datos Se quita de la sección replicación las notas publicación y generación 27/01/2010
de Snapshots en replicación – No aplica para el desarrollo
2.05.03 Felix Garcia Arq. Datos Restricción en el uso de variable @@Identity 08/02/2010
2.05.04 Javier Sangines Arq. Datos Se complementaron las secciones de : 12/07/2011
 Creación o Modificación de SPs, Triggers, Vistas
 Creacion tablas
 Sentencias Básicas (Select, Insert, Update, Delete).
 Recomendaciones

Historia del Formato (*)


Esta sección es solo para controlar el historial de este formato, cuando vaya a ser ocupado en un proyecto en
particular, no es necesario imprimir esta sección.

Versió Autor Solicitante Descripción Fecha


n
1.0.0 Pedro Rocha Comité de Version Inicial 25-10-2005
Cadena de Valor

Documento confidencial | Cadena de Valor Versión Documento: 2.03.00


Versión Template: 1.0.0
18

También podría gustarte