Personal WebSite of Leonardo Sasso

Pagina Personal de Leonardo Sasso
No utilizar @@identify cuando existen triggers asociados PDF Imprimir E-mail
Articulos - SQL
  
Lunes, 15 de Febrero de 2010 10:36

No utilizar la variable @@Identity en los SP (Stored Procedures) cuando en las tablas involucradas en estos ultimos, posean triggers.

 

La razon:

Al realizar algun insert desde el SP el valor de la variable @@identity va cambiando, el problema radica en que si el trigger realiza tambien un trigger en otra tabla, entonces el valor de @@identity que obtendremos en el SP sera el valor de la ultima tabla y no el de la tabla buscada en el SP, debido a que dicha funcion no esta restringida por el Scope.

 

La solucion:
Se recomienda en dichos casos utilizar la funcion SCOPE_IDENTITY() que restringe el scope en el cual estamos trabajando y no es afectada por los triggers

 

Descripcion MSDN de la funcion SCOPE_IDENTITY()
Devuelve el último valor de identidad insertado en una columna de identidad en el mismo ámbito. Un ámbito es un módulo: un procedimiento almacenado, desencadenador, función o lote. Por tanto, dos instrucciones están en el mismo ámbito si se encuentran en el mismo procedimiento almacenado, función o lote.



 
Script para obtener ubicacion e informacion sobre una columna PDF Imprimir E-mail
Articulos - SQL
  
Miércoles, 04 de Noviembre de 2009 17:18

 

Normal 0 21

Declare @vTabla VarChar (50),

@vColumna VarChar (50)

Set @vTabla = Null --'%RENGLON'

Set @vColumna = '%ts_desc%'

-- Recupera todas las columnas de la tabla informada.

If Not @vTabla Is Null

Select Convert (VarChar (30), SO.Name) NombreTabla,

Convert (VarChar (30), SC.Name) NombreColumna,

Convert (VarChar (30), ST.Name) TipoDato,

SC.Length, SC.xPrec

From SysObjects SO,

SysColumns SC,

SysTypes ST

Where SO.xType = 'U'

And SO.Name Like @vTabla

And SC.Id = SO.Id

And ST.xType = SC.xType

Order By SO.Name, SC.ColID

-- Recupera la tabla de la columna informada.

If Not @vColumna Is Null

Select Convert (VarChar (30), SO.Name) NombreTabla,

Convert (VarChar (30), SC.Name) NombreColumna,

Convert (VarChar (30), ST.Name) TipoDato,

SC.Length, SC.xPrec

From SysObjects SO,

SysColumns SC,

SysTypes ST

Where SO.xType = 'U'

And SC.Name Like @vColumna

And SC.Id = SO.Id

And ST.xType = SC.xType

Order By SO.Name, SC.ColID

 

Actualizado ( Miércoles, 04 de Noviembre de 2009 17:19 )
 
Script Avanzado para obtener todos los jobs de un motor SQL PDF Imprimir E-mail
Articulos - SQL
  
Miércoles, 04 de Noviembre de 2009 17:16

Normal 0 21

Declare @vJobName VarChar (512)

Set @vJobName = Null

-- Null = TODOS

Declare @vJobSchedule_Id Int,

@vJobSchedule_FreqType Int,

@vJobSchedule_FreqInterval Int,

@vJobSchedule_FreqSubDayType Int,

@vJobSchedule_FreqSubDayInterval Int,

@vJobSchedule_FreqRelativeInterval Int,

@vJobSchedule_FreqRecurrenceFactor Int,

@vJobSchedule_ActiveStartDate Int,

@vJobSchedule_ActiveEndDate Int,

@vJobSchedule_ActiveStartTime Int,

@vJobSchedule_ActiveEndTime Int,

@vJobSchedule_Desc NVarChar (255)

Create Table #Jobs (Job_Id UniqueIdentifier Null,

Job_Name SysName Null,

Job_Enabled TinyInt Null,

JobStep_Id Int Null,

JobStep_Name SysName Null,

JobStep_SubSystem NVarChar (40) Null,

JobStep_Command NVarChar (4000) Null,

JobStep_DBName SysName Null,

JobStep_OutputFile NVarChar (200) Null,

JobSchedule_NexRunDate Int Null,

JobSchedule_NexRunTime Int Null,

JobSchedule_Id Int Null,

JobSchedule_Name SysName Null,

JobSchedule_FreqType Int Null,

JobSchedule_FreqInterval Int Null,

JobSchedule_FreqSubDayType Int Null,

JobSchedule_FreqSubDayInterval Int Null,

JobSchedule_FreqRelativeInterval Int Null,

JobSchedule_FreqRecurrenceFactor Int Null,

JobSchedule_ActiveStartDate Int Null,

JobSchedule_ActiveEndDate Int Null,

JobSchedule_ActiveStartTime Int Null,

JobSchedule_ActiveEndTime Int Null,

JobSchedule_Desc NVarChar (255) Null,

Procesado Bit Null

)

Insert Into #Jobs (Job_Id , Job_Name , Job_Enabled ,

JobStep_Id , JobStep_Name , JobStep_SubSystem ,

JobStep_Command , JobStep_DBName , JobStep_OutputFile ,

JobSchedule_NexRunDate , JobSchedule_NexRunTime , JobSchedule_Id ,

JobSchedule_Name , JobSchedule_FreqType , JobSchedule_FreqInterval ,

JobSchedule_FreqSubDayType , JobSchedule_FreqSubDayInterval , JobSchedule_FreqRelativeInterval,

JobSchedule_FreqRecurrenceFactor, JobSchedule_ActiveStartDate , JobSchedule_ActiveEndDate ,

JobSchedule_ActiveStartTime , JobSchedule_ActiveEndTime , Procesado

)

Select j.Job_id , j.Name , j.Enabled ,

js.Step_Id , js.Step_Name , js.SubSystem ,

js.Command , js.DataBase_Name , js.Output_File_Name ,

jt.Next_Run_Date , jt.Next_Run_Time , s.Schedule_Id ,

s.name , Freq_Type , Freq_Interval ,

Freq_SubDay_Type , Freq_SubDay_Interval , Freq_Relative_Interval,

Freq_Recurrence_Factor, Active_Start_Date , Active_End_Date ,

Active_Start_Time , Active_End_Time , 0

From msdb..sysJobs As j

Inner Join msdb..sysJobSteps As js

On (j.Job_Id = js.Job_Id)

Inner Join msdb..sysJobSchedules As jt

Inner Join msdb..sysSchedules As s

On (jt.Schedule_id = s.Schedule_id)

On (j.Job_Id = jt.Job_Id)

Where ((j.Name Like '%' + @vJobName + '%') Or (@vJobName Is Null))

Select Top 1

@vJobSchedule_Id = JobSchedule_id ,

@vJobSchedule_FreqType = JobSchedule_FreqType ,

@vJobSchedule_FreqInterval = JobSchedule_FreqInterval ,

@vJobSchedule_FreqSubDayType = JobSchedule_FreqSubDayType ,

@vJobSchedule_FreqSubDayInterval = JobSchedule_FreqSubDayInterval ,

@vJobSchedule_FreqRelativeInterval = JobSchedule_FreqRelativeInterval,

@vJobSchedule_FreqRecurrenceFactor = JobSchedule_FreqRecurrenceFactor,

@vJobSchedule_ActiveStartDate = JobSchedule_ActiveStartDate ,

@vJobSchedule_ActiveEndDate = JobSchedule_ActiveEndDate ,

@vJobSchedule_ActiveStartTime = JobSchedule_ActiveStartTime ,

@vJobSchedule_ActiveEndTime = JobSchedule_ActiveEndTime

From #Jobs

Where Procesado = 0

While @@RowCount > 0

Begin

Exec msdb..SP_Get_Schedule_Description @vJobSchedule_FreqType ,

@vJobSchedule_FreqInterval ,

@vJobSchedule_FreqSubDayType ,

@vJobSchedule_FreqSubDayInterval ,

@vJobSchedule_FreqRelativeInterval,

@vJobSchedule_FreqRecurrenceFactor,

@vJobSchedule_ActiveStartDate ,

@vJobSchedule_ActiveEndDate ,

@vJobSchedule_ActiveStartTime ,

@vJobSchedule_ActiveEndTime ,

@vJobSchedule_Desc OUTPUT

Update #Jobs Set JobSchedule_Desc = @vJobSchedule_Desc,

Procesado = 1

Where JobSchedule_id = @vJobSchedule_Id

Select Top 1

@vJobSchedule_Id = JobSchedule_id ,

@vJobSchedule_FreqType = JobSchedule_FreqType ,

@vJobSchedule_FreqInterval = JobSchedule_FreqInterval ,

@vJobSchedule_FreqSubDayType = JobSchedule_FreqSubDayType ,

@vJobSchedule_FreqSubDayInterval = JobSchedule_FreqSubDayInterval ,

@vJobSchedule_FreqRelativeInterval = JobSchedule_FreqRelativeInterval,

@vJobSchedule_FreqRecurrenceFactor = JobSchedule_FreqRecurrenceFactor,

@vJobSchedule_ActiveStartDate = JobSchedule_ActiveStartDate ,

@vJobSchedule_ActiveEndDate = JobSchedule_ActiveEndDate ,

@vJobSchedule_ActiveStartTime = JobSchedule_ActiveStartTime ,

@vJobSchedule_ActiveEndTime = JobSchedule_ActiveEndTime

From #Jobs

Where Procesado = 0

End

Select Job_Name ,

Job_Enabled ,

JobStep_Id ,

JobStep_Name ,

JobStep_SubSystem ,

JobStep_Command ,

JobStep_DBName ,

JobStep_OutputFile ,

JobSchedule_NexRunDate ,

JobSchedule_NexRunTime ,

JobSchedule_Name ,

JobSchedule_Desc

From #Jobs

Order By Job_Name, JobSchedule_Id, JobStep_Id

Drop Table #Jobs

/* FIN */

 
Script para obtener todos los jobs de un motor SQL PDF Imprimir E-mail
Articulos - SQL
  
Miércoles, 04 de Noviembre de 2009 17:14

 

Normal 0 21

Select j.Name,

j.Enabled,

s.Step_Name,

s.Step_Id,

s.SubSystem,

s.Command,

s.DataBase_Name,

s.Last_Run_Time,

s.Last_Run_Duration,

s.Output_File_Name,

t.Next_Run_Date,

t.Next_Run_Time

From msdb..sysJobs As j

Inner Join msdb..sysJobSteps As s On (j.Job_Id = s.Job_Id)

left Join msdb..sysJobSchedules As t On (j.Job_Id = t.Job_Id)

Order By j.Name, s.Step_Id

 

 
Buscar un texto dentro de todas las SP de la base de datos PDF Imprimir E-mail
Articulos - SQL
  
Martes, 03 de Noviembre de 2009 16:11

/***************************************************************

 ** Busca un texto dentro de todas las SP de la base de datos **
 ** www.leonardosasso.com.ar                                  **

 ***************************************************************/

 

Declare @vTexto VarChar (8000)

 

Set @vTexto = '<poner el texto a buscar>'

 

 

Select Objeto     = Convert (VarChar (50), SO.Name),

       TipoObjeto = AO.Type_Desc,

       Entorno    = Replace (SubString (SC.Text, CharIndex(@vTexto, SC.Text) - 30, 60 + Len (@vTexto)), Char(13) + Char(10), ' <Enter> ')

  From Sys.SysObjects SO Inner Join Sys.All_Objects AO On AO.Object_Id = SO.Id

                         Inner Join Sys.SysComments SC ON SC.Id        = SO.Id

 Where SC.Text  Like '%' + @vTexto + '%'

   And AO.Type_Desc In ('SQL_STORED_PROCEDURE', 'VIEW')

 Order By AO.Type_Desc, SO.Name, SC.ColID
 
<< Inicio < Prev 1 2 3 4 Próximo > Fin >>

Página 1 de 4

Acceso



Buscar:

Estadisticas

mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterHoy51
mod_vvisit_counterAyer59
mod_vvisit_counterEsta Semana392
mod_vvisit_counterEste Mes804
mod_vvisit_counterTotal34112