estandar sql

MANUAL DE ESTÁNDARES PARA EL DESARROLLO DE OBJETOS DE BASE DE DATOS Documento Técnico Versión: 01 Elaborado por: Firma

Views 182 Downloads 11 File size 312KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

MANUAL DE ESTÁNDARES PARA EL DESARROLLO DE OBJETOS DE BASE DE DATOS Documento Técnico Versión: 01

Elaborado por:

Firma:

Cargo: Fecha: Revisado por:

Firma:

Cargo: Fecha: Aprobado por: Cargo: Fecha:

Firma:

HOJA DE CONTROL DE CAMBIOS ITEM 1

TEXTO MODIFICADO Elaboración inicial del documento

VERSIÓN 01

FECHA

RESPONSABLE

INDICE 1.

ESTANDARES

DE BASE DE DATOS CON SQL SERVER........................................................................................4

1.1. NORMAS GENERALES DE CODIFICACION Y NOMENCLATURA...........................................................................4 1.2. NOMENCLATURA PARA OBJETOS DE LAS BASES DE DATOS..................................................................................7 1.3. USO DE PALABRAS RESERVADAS....................................................................................................................... 8 1.4. TIPOS DE DATOS............................................................................................................................................. 10 1.4.1. Numéricos EXACTOS...................................................................................................................... 10 1.4.2. Numéricos con aproximación...........................................................................................................11 1.4.3. datetime y smalldatetime.................................................................................................................11 1.4.4. Cadenas de caracteres....................................................................................................................11 1.4.5. Cadenas de caracteres Unicode......................................................................................................11 1.4.6. Cadenas binarias.............................................................................................................................11 1.4.7. Otros tipos de datos......................................................................................................................... 12 1.4.8. Nomenclatura de Bases de Datos...................................................................................................12 1.4.9. Nomenclatura de Tablas.................................................................................................................. 12 1.4.10. Nomenclatura de Columnas............................................................................................................14 1.4.11. Nomenclatura de Constraints..........................................................................................................14 1.4.12. Nomenclatura de Indices................................................................................................................. 15 1.4.13. Nomenclatura de Vistas................................................................................................................... 15 1.4.14. Nomenclatura de TIPOS DE DATOS...............................................................................................15 1.4.15. Nomenclatura de Reglas................................................................................................................. 15 1.4.16. Nomenclatura de Defaults...............................................................................................................15 1.4.17. Uso de la sentencia – use................................................................................................................15 1.4.18. Nomenclatura de PROCEDIMIENTOS ALMACENADOS y FUNCIONES.....................................16 1.4.19. Nomenclatura de Triggers................................................................................................................16 2.

OPTIMIZACION Y REVISION de codigos.................................................................................................17

1. ESTANDARES DE BASE DE DATOS CON SQL SERVER 1.

NORMAS GENERALES DE CODIFICACION Y NOMENCLATURA

Las sentencias From al incluir varias tablas deberán ser complementadas con las sentencias Inner Join, Left Join o Right Join según sea el caso. Considerar que el Ancho de Columnas para la codificación no debe exceder de 140 columnas. Este grupo de sentencias no debe usarse: From RDMaeDeu a, RDMovDeu b, SGMaeUsu c Where a.sicodmun = b.sicodmun And a.cnumdoc = b.cnumdoc And a.sicodusu *= c.sicodusu

La codificación correcta sería: From RDMaeDeu a Inner Join RDMovDeu b On (a.sicodmun = b.sicodmun And a.cnumdoc = b.cnumdoc) Left Join SGMaeUsu c On (a.sicodusu = c.sicodusu)

Considerar el uso de la Sugerencias de Bloqueo cuando las tablas involucradas dentro de las mismas tenga un alto nivel transaccional, pero tomando en cuenta las posibilidades de las LECTURAS FANTASMAS que pudieran ocurrir. Las sugerencias de bloqueo que se recomienda en la lectura es NoLock. From RDMaeDeu a (NoLock) Inner Join RDMovDeu (NoLock) b On (a.sicodmun = b.sicodmun And a.cnumdoc = b.cnumdoc) Left Join SGMaeUsu (NoLock) c On (a.sicodusu = c.sicodusu)

La indentación debe de ser de (03 espacios). El ancho del tabulador en los editores para las sentencias SQL como el Analizador de Consultas debe establecer a 3 espacios y debe también establecerse que los tabuladores deben guardarse como espacios.

If Exists (Select a.sicodmun From Mae_Deu Where a.sicodmun = @psicodmun And a.cNumDoc = @pcnumdoc) Begin Select .. .. From Inner Join .. .. Left Join .. .. Where .. .. And .. .. End Else Begin Select .. .. From Inner Join .. .. Left Join .. .. Where .. .. And .. .. End

Las palabras reservadas Begin - Else - End deberán estar en la misma columna de indentación de la sentencia lógica que las origina. Cuando los identificadores correspondientes Begin – End se extiendan demasiado en el código deberá comentarse en el identificador End la línea de la cual proviene, esto hará más fácil el seguimiento de la codificación. 



Cada sentencia debe ir en una línea diferente Select... From... Where... Los Case deben estar alineados así : (El Case en una línea y los When y el Else en otras diferentes) Case When .... Then .....

Else ...... End Si el Then del Case fuera demasiado largo se indentará el Then 3 espacios adicionales al When al que pertenece Case When .... Then ..... Else ...... End Los grupos de claves para los Join también deben estar indentados si el ancho supera las 140 columnas En el Where cada condicionante debe ir en una línea aparte y el And deberá estar alineado a la derecha de la sentencia Where, ejemplo Where sicodmun = @psicodmun And cnumdoc = @psicodmun And sitipedo = 1 And sicodusu = 457



 

En cuanto a identificadores 

Su tamaño puede variar desde 1 hasta 50 caracteres, incluyendo letras, símbolos y números. El primer carácter del identificador puede ser una letra o uno de los siguientes símbolos:



Carácter @ (*) # (*)

## _

Uso Representa a una variable local Representa el nombre de un objeto temporal En el caso de una tabla o stored procedure : Representa a un objeto temporal local Representan a un objeto temporal global Carácter general

(*) Se recomienda que los nombres de los objetos temporales no excedan de los 20 caracteres, incluyendo al # o ##, debido a que SQL Server les agrega un sufijo numérico interno. Las tablas temporales deberán en lo posible tener el mismo nombre de la tabla que se extraen los datos o un nombre explícito sobre el proceso para la cual es necesitada. El prefijo para cualquier tabla temporal deberá ser #Tmp_nombre_tabla ##Tmp_nombre_tabla Nota: Al utilizar nombres de objetos con espacios o caracteres especiales, se debe utilizar los corchetes [ ] como identificador del nombre. Esta consideración debe ser contemplada para el uso de cualquier objeto dentro de la base de datos

La nomenclatura con caracteres especiales puede ser: [#Tmp-nombre-tabla] [##Tmp—nom bre tabla]  

Los caracteres posteriores al primer carácter pueden incluir letras, dígitos o los símbolos #, $ o _. No se permiten espacios en blanco en el nombre del identificador.

 

Los nombres serán representados por 3 o 6 caracteres, dependiendo de la frecuencia de uso de la palabra y de la representatividad o significancia de la cantidad de caracteres para cada una de las palabras Los nombres y prefijos para los tipos de dato estándar de SQL Server son: 

Variables internas dentro de los Procedimientos Almacenados, Vistas, Desencadenadores, Funciones y/o DTS : o Bit @bnombre_variable (b) o Tinyint @tinombre_variable (ti) o Int @inombre_variable (i) o Smallint @sinombre_variable (si) o Char @cnombre_variable (c) o Varchar @vnombre_variable (v) o NVarchar @nvnombre_variable (nv) o Numeric @nnombre_variable (n) o Real @rnombre_variable (r) o Smalldatetime @sdnombre_variable (sd) o Datetime @dtnombre_variable (dt)



Para los parámetros usados en los Procedimientos Almacenados, Funciones y/o DTS : o Se les añadirá la letra (p) en minusculas :           

2.

Bit Tinyint Int Smallint Char Varchar NVarchar Numeric Real Smalldatetime Datetime

@pbnombre_variable @ptinombre_variable @pinombre_variable @psinombre_variable @pcnombre_variable @pvnombre_variable @pnvnombre_variable @pnnombre_variable @prnombre_variable @psdnombre_variable @pdtnombre_variable

NOMENCLATURA PARA OBJETOS DE LAS BASES DE DATOS Tipo de Dato Binary Character Date and time Exact numeric Approximate numeric Integer

Monetary

Tipo de dato de SQL Server binary[(n)] varbinary[(n)] Char[(n)] varchar[(n)] Datetime Smalldatetime decimal[(p[, s])] numeric[(p[, s])] Float[(n)] Real Int Smallint Tinyint Money

Smallmoney Bit Timestamp Identity Text Sysname Image

Special Long Text and image

Sinónimos que deben evitarse Tipo de Dato Varbinary Char Char (1) Char (n) varchar (n) Decimal Int Float Real Float

3.

Sinónimo (Evitar) Binary varying Character Character Character (n) Character varying (n) Dec Integer Double precision Float [(n)] for n = 1–7 Float [(n)] for n = 8–15

USO DE PALABRAS RESERVADAS 

Se usaran Mayúsculas / Minúsculas en todas las palabras reservadas. Estas se hacen extensivas a las funciones propias del SQL. Ejemplo Select - From - Where - Group By - Having - If - Else - Begin - End - And - Or Inner Join - On. Getdate(), Rtrim(), Ltrim(),

Add All Alter And Any As Asc Authorization Backup Begin Between Break Browse Bulk By

Except Exec Execute Exists Exit Fetch File Fillfactor For Foreign Freetext Freetexttable From Full Function

Percent Plan Precision Primary Print Proc Procedure Public Raiserror Read Readtext Reconfigure References Replication Restore

Cascade Case Check Checkpoint Close Clustered Coalesce Collate Column Commit Compute Constraint Contains Containstable Continue Convert Create Cross Current Current_date Current_time Current_timestamp Current_user Cursor Database Dbcc Deallocate Declare Default Delete Deny Desc Disk Distinct Distributed Double Drop Dummy Dump Else End Errlvl Escape

Goto Grant Group Having Holdlock Identity Identity_insert Identitycol If In Index Inner Insert Intersect Into Is Join Clave Kill Left Like Lineno Load National Nocheck Nonclustered Not Null Nullif Of Off Offsets On Open Opendatasource Openquery Openrowset Openxml Option Or Order Outer Over

Restrict Return Revoke Right Rollback Rowcount Rowguidcol Rule Save Schema Select Session_user Set Setuser Shutdown Some Statistics System_user Table Textsize Then To Top Tran Transaction Trigger. Truncate Tsequal Union Unique Update Updatetext Use User Values Varying View Waitfor When Where While With Writetext

4.

TIPOS DE DATOS En Microsoft® SQL Server™, cada columna, variable local, expresión y parámetro dispone de un tipo de datos relacionado, que es un atributo que especifica el tipo de datos (integer, character, money, etc.) que el objeto puede contener. SQL Server suministra un conjunto de tipos de datos del sistema que define todos los tipos de datos que pueden utilizarse con SQL Server. El conjunto de tipos de datos suministrados por el sistema se muestra debajo. También se pueden utilizar tipos de datos definidos por el usuario, que son en realidad alias de los tipos de datos suministrados por el sistema. Para obtener más información acerca de los tipos de datos definidos por el usuario, consulte sp_addtype y Crear tipos de datos definidos por el usuario. Cuando dos expresiones que disponen de tipos de datos diferentes, intercalaciones, precisión, escala o longitud los combina un operador: 

El tipo de datos de los valores resultantes viene determinado al aplicar las reglas de precedencia de tipos de datos a los tipos de datos de las expresiones de entrada. Para obtener más información, consulte Precedencia de los tipos de datos.



Si el tipo de datos del resultado es char, varchar, text, nchar, nvarchar o ntext, la intercalación del valor del resultado viene determinado por las reglas de precedencia de la intercalación. Para obtener más información, consulte Precedencia de intercalación.



La precisión, escala y longitud del resultado dependen de la precisión, escala y longitud de las expresiones de entrada. Para obtener más información, consulte Precisión, escala y longitud.

SQL Server proporciona sinónimos de tipos de datos para la compatibilidad con SQL-92. Para obtener más información, consulte Sinónimos de tipos de datos. Sin embargo estos sinónimos no deben emplearse.

4.1.

NUMÉRICOS EXACTOS

Integers bigint Datos enteros (números enteros) comprendidos entre -2^63 (-9223372036854775808) y 2^63 -1 (9223372036854775807). int Datos enteros (números enteros) comprendidos entre -2^31 (-2.147.483.648) y 2^31 - 1 (2.147.483.647). smallint Datos enteros comprendidos entre 215 (-32.768) y 215 - 1 (32.767). tinyint Datos enteros comprendidos 0 y 255. Bit bit Datos enteros con valor 1 ó 0. Decimal y Numeric decimal Datos de precisión y escala numérica fijas comprendidos entre -1038 +1 y 1038 – 1.

numeric Funcionalmente equivalente a decimal. Money y Smallmoney money Valores de moneda comprendidos entre -263 (-922.337.203.685.477,5808) y 263 - 1 (+922.337.203.685.477,5807), con una precisión de una diezmilésima de la unidad monetaria. smallmoney Valores de moneda comprendidos entre -214.748,3648 y +214.748,3647, con una precisión de una diezmilésima de la unidad monetaria.

4.2.

NUMÉRICOS CON APROXIMACIÓN

float Números con precisión de coma flotante comprendidos entre -1,79E + 308 y 1,79E + 308. real Números con precisión de coma flotante comprendidos entre -3,40E + 38 y 3,40E + 38.

4.3.

DATETIME Y SMALLDATETIME datetime Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de diciembre de 9999, con una precisión de 3,33 milisegundos. smalldatetime Datos de fecha y hora comprendidos entre el 1 de enero de 1900 y el 6 de junio de 2079, con una precisión de un minuto.

4.4.

CADENAS DE CARACTERES char Datos de caracteres no Unicode de longitud fija con una longitud máxima de 8.000 caracteres. varchar Datos no Unicode de longitud variable con un máximo de 8.000 caracteres. text Datos no Unicode de longitud variable con una longitud máxima de 231 - 1 (2.147.483.647) caracteres.

4.5.

CADENAS DE CARACTERES UNICODE nchar Datos Unicode de longitud variable con una longitud máxima de 4.000 caracteres. nvarchar Datos Unicode de longitud variable con una longitud máxima de 4.000 caracteres. sysname es el tipo de datos suministrado por el sistema y definido por el usuario que es funcionalmente equivalente a nvarchar(128) y que se utiliza para hacer referencia a nombres de objetos de bases de datos. ntext Datos Unicode de longitud variable con una longitud máxima de 230 - 1 (1.073.741.823) caracteres.

4.6.

CADENAS BINARIAS binary Datos binarios de longitud fija con una longitud máxima de 8.000 bytes.

varbinary Datos binarios de longitud variable con una longitud máxima de 8.000 bytes. image Datos binarios de longitud variable con una longitud máxima de 231 - 1 (2.147.483.647) bytes.

4.7.

OTROS TIPOS DE DATOS cursor Una referencia a un cursor. sql_variant Un tipo de datos que almacena valores de varios tipos de datos aceptados en SQL Server, excepto text, ntext, timestamp y sql_variant. table Un tipo de datos especial que se utiliza para almacenar un conjunto de resultados para un proceso posterior. timestamp Un número único para toda la base de datos que se actualiza cada vez que se actualiza una fila. uniqueidentifier Un identificador exclusivo global (GUID).

4.8.

NOMENCLATURA DE BASES DE DATOS

Prefijo Ejemplo

BD BDSIAT

Proyecto: SIAT

4.9.

NOMENCLATURA DE TABLAS

Pistas de Auditoria: Las Pistas de Auditoria se rigen bajo dos criterios: A) Tablas Auditables Con Histórico: Las tablas que se clasifiquen Con Histórico contemplan de manera obligatoria los siguientes campos:  Usuario de creación.  Fecha y Hora de creación.  Terminal de creación. Adicional se creará una Tabla de Auditoria generada por un Desencadenador (Trigger), el cual genera el histórico de auditoria. B) Tabla Auditables Sin Histórico: Las tablas que se clasifican Sin Histórico deben contemplar de manera obligatoria los siguientes campos:    

Usuario de creación. Fecha y Hora de creación. Terminal de creación. Usuario de actualización.

 

Fecha y Hora de actualización. Terminal de actualización.

Nomenclatura: Prefijo

_

Ejemplo Comentarios

MAE_EXP Para tablas temporales físicas, siempre que sea posible, el nombre de la tabla será el mismo de la tabla a la cual se hace referencia, de no ser posible, se utilizará otro nombre, pero siempre dentro de los estándares definidos. A este nombre de la tabla temporal, se le pospone el sufijo Tmp1.

Valores para el Proyecto. Tipo de Tabla: MAE = Maestro MOV = Movimiento DET = Detalle TAB = Tabla REL = Relación AUX = Auxiliar Prefijo Tabla:

Diseño Estándar EXP CON DJ

= Expediente = Convenio = Declaración Jurada

Diseño Data Mart Dim= Dimensión (Donde se tienen los atributos de sistema, por lo general es una tabla maestra del OLAP) Hec = Hecho (Donde se tiene el detalle del negocio, pueden ser los maestros, movimientos o detalles del OLAP) Lkp = Look Up (Permite mapear los códigos principales de las bases OLAP con los códigos principales del Data Mart) Txs =Transaccional (Tablas cargadas al Data Mart que son extraídas directamente desde las bases de datos OLAP)

Ejemplo. MAE_CONT DimPer (Tabla Dimensional de Personas) 1

Observaciones:  El llenado de las tablas parámetros (Descripciones) es en minúsculas y la primera letra es mayúscula. 

Las tablas de Históricos finalizan con H



Sólo para el caso de las tablas transaccionales para Data Mart se agregaría antes de colocar el nombre de la tabla referenciada (aunque en realidad es el nombre del tipo de tabla o información que se está extrayendo el tipo de base de datos de dónde se extrae la información __H

4.10.

NOMENCLATURA DE COLUMNAS

Prefijo

_

Ejemplo

CDESVIA Descripción de vía CCODEST Código de Estado INUMDOC Número de Documento NPLACA Número de placa

Comentarios

Si el campo está formado por una sola palabra, el prefijo de campo será de 6 caracteres, si está formado por 2 palabras, se usaran dos prefijos de campo, cada uno de 3 caracteres. Y si está formado por más de dos palabras, se combinaran las siguientes longitudes, 3-1-2; siempre tratando de respetar el uso de 6 caracteres. La longitud máxima del Identificador, en algún caso extremo, será de 9 caracteres.

4.11.

NOMENCLATURA DE CONSTRAINTS

Prefijo

Primary Key PK_ Altern Key AK__ Foreign Key FK__ Default DF__ Check : De Campo CKC__ De Tabla CKT__

Ejemplo

PK_MAE_PER Clave Primaria RDMAEPER. AK_MAE_PER_001 Clave Alterna RDMAEPER. FK_TAB_DOC_MAE_PER CKC_MAE_PER_CODPER  Todo constraint debe tener un nombre de acuerdo al estándar especificado.  La Tabla Referencia es aquella cuyos campos deben existir en la tabla origen (existe una relación de referencia)  No puede incluir al #.  El Constraint Primary Key Genera un índice clustered, Unique con el mismo nombre  El Constraint Alternate Key Genera un índice nonclustered, Unique

Comentarios



4.12.

NOMENCLATURA DE INDICES

Prefijo Ejemplo Comentarios

4.13.

R_ R_IMPORTE Usar RULES solo para user defined data types, en caso de columnas usar CHECKS.

NOMENCLATURA DE DEFAULTS

Prefijo Ejemplo Comentarios

4.17.

T_ T_IMPORTE Usar TIPOS DE DATOS cuando se hayan definidos Dominios

NOMENCLATURA DE REGLAS

Prefijo Ejemplo Comentarios

4.16.

VW_ VW_ConsultaPersona En el caso que la vista sea sobre una única tabla, se adopta el nombre de la tabla, en caso contrario se utiliza los criterios para nombrar tablas.

NOMENCLATURA DE TIPOS DE DATOS

Prefijo Ejemplo Comentarios

4.15.

IX__ IX_MAE_PER_001  Usar esta nomeclatura para índices que no dependen de un constraint  El Correlativo a usar es de 3 dígitos

NOMENCLATURA DE VISTAS

Prefijo Ejemplo Comentarios

4.14.

con el mismo nombre El Constraint Foreign Key Genera un índice nonclustered, con el mismo nombre

D_ D_IMPORTE Usar DEFAULT (Procedural) solo para user definied data types, en caso de columnas usar DEFAULT (Declarativo).

USO DE LA SENTENCIA – USE Uso: USE se ejecuta en tiempo de compilación y de ejecución y surte efecto inmediatamente. Por lo tanto, las instrucciones que aparecen en un lote después de la instrucción USE se ejecutan en la base de datos especificada. Use

Ejemplo: USE BDSIAT Consideraciones: Esta sentencia se debe incluir antes de la cabecera en todos los Procedimientos, funciones y Scripts que se vayan a crear y/o actualiza en la base de datos.

4.18.

NOMENCLATURA DE PROCEDIMIENTOS ALMACENADOS Y FUNCIONES

Prefijo

Procedimientos : sp Funciones: fn< NombreFN>

Ejemplo

 

spCALCULA_IV spRECALCULO

 

fnCALCULA_IV fnCALCULA_IV

Comentarios El uso del prefijo (T) se utiliza solo cuando el objeto se vaya instalar en el servidor Tributario.

Todo Procedimiento Almacenado deberá ser documentado con la siguiente estructura. '******************************************************************************** ** '* '* Input : - Descripción de los parámetros '* Output : '* Creado por : '* Fec Creación : '* Fec Actualización: Responsable : Analista. ‘* Motivo : '******************************************************************************** **

4.19. Prefijo

NOMENCLATURA DE TRIGGERS      

Para Inserción: ti Para Actualización: tu Para Eliminación: td Para Auditoria: tu tiMAE_DEU tuMAE_DEU

  Comentarios

tdMAE_DEU taMAE_DEU

Solo los Triggers de Auditoría pueden tener todas las operaciones (Inserción, Actualización y Eliminación).

Todo Trigger deberá ser documentado con la siguiente estructura. '******************************************************************************** ** '* '* Output : '* Creado por : '* Fec Creación : '* Fec Actualización: Responsable : Analista. ‘* Motivo : '******************************************************************************** **

2. OPTIMIZACION Y REVISION DE CODIGOS Dentro del proceso de optimización de los códigos de los objetos de la Base Datos como los Procedimientos Almacenados, Vistas , Desencadenadores y*o DTS. Se han determinado a la fecha los siguientes errores comunes y que no existir en el sistema puesto que generan lentitud y degradan la performance del Servidor: Where a.sicodmun = 1 Declare @psicodmun Smallint Set @psicodmun=1 Where a.sicodmun = @psicodmun (Donde el parámetro esta definido como Int en vez de Smallint) Estas condiciones ocasiona una conversión de datos implícita puesto que la columna sicodmun en todas las tablas es un campo del tipo smallint, el SQL Server interpreta el número 1 como un Entero y realiza una conversión implícita lo cual degrada la performance del Servidor. De forma similar funciona con el parámetro mal definido. En las pruebas que se puedan realizar en los Servidores de Desarrollo y Pre – Producción estas sentencias no suelen ocasionar lentitud, sin embargo en el Servidor de Producción cuyo nivel transaccional es muy alto la diferencia es notaria. Las sentencias From al incluir varias tablas deberán ser complementadas con las sentencias Inner Join, Left Join o Right Join sea el caso. Este grupo de sentencias no debe usarse: From Mae_Deu a, Mov_Deu b, Mae_Usu c Where a.sicodmun = b.sicodmun And a.cnumdoc = b.cnumdoc And a.sicodusu *= c.sicodusu

La codificación correcta sería:

From Mae_Deu a Inner Join Mov_Deu b On (a.sicodmun = b.sicodmun And a.cnumdoc = b.cnumdoc) Left Join Mae_Usu c On (a.sicodusu = c.sicodusu)

Asimismo los Join debe usar los índices declarados en las tablas y deben ser probados y verificados mediante una PLAN DE EJECUCION (herramienta propia del SQL Server). Considerar el uso de la Sugerencias de Bloqueo cuando las tablas involucradas dentro de las mismas tenga un alto nivel transaccional, pero tomando en cuenta las posibilidades de las LECTURAS FANTASMAS que pudieran ocurrir. Las sugerencias de bloqueo que se recomienda en la lectura es NoLock. From Mae_Deu a (NoLock) Inner Join Mov_Deu (NoLock) b On (a.sicodmun = b.sicodmun And a.cnumdoc = b.cnumdoc) Left Join Mae_Usu (NoLock) c On (a.sicodusu = c.sicodusu)

Al momento de realizar los Insert o Updates especificar que el bloqueo debe ser por registro: RowLock La tabulación de indentación a usar será de tres (03) espacios y se deberá conservar aparte de la indentación un ORDEN en la codificación. If Exists (Select a.sicodmun From Mae_Deu Where a.sicodmun = @psicodmun And a.cNumDoc = @pcnumdoc) Begin Select .. .. From Inner Join .. .. Left Join .. .. Where .. .. And .. .. End Else Begin Select .. .. From Inner Join .. .. Left Join .. .. Where .. .. And .. .. End

Tenga en consideración la optimización de los códigos descritos Se debe emplear el Procedimiento Almacenado del sistema sp_executesql para disparar cadenas de código SQL, he aquí un ejemplo: declare @vsql1 varchar(1000) declare @vsql2 nvarchar(1000) declare @sicodmun smallint declare @cnumdoc char(13) -select @sicodmun = 1 select @cnumdoc = '01M220558' --

select @vsql1 = 'select * from mae_deu where sicodmun = ' + ltrim(str(@sicodmun)) + ' and cnumdoc = ' + char(39) + rtrim(ltrim(@cnumdoc)) + char(39) --select @vsql1 exec (@vsql1) -select @vsql2 = N'select * from mae_deu where sicodmun = @p_sicodmun and cnumdoc = @p_cnumdoc ' exec sp_executesql @vsql2, N'@p_sicodmun smallint, @p_cnumdoc char(13)', @p_sicodmun = @sicodmun, @p_cnumdoc = @cnumdoc -- select top 10 * from mae_deu where sicodmun = 1 and sdfecemi >= '01/06/2005 00:00'