La siguiente consulta es un ejemplo de como obtener el primer y el ultimo dia del mes que viene:

-- Primer dia del mes que viene
SELECT dateadd(mm,0,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
 
-- Ultimo dia del mes que viene
SELECT dateadd(dd,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))

Para determinar el número de intentos de conexión a una instancia de SQL Server, basta con mirar el valor de la variable @@connections

La misma, muestra todos los intentos de inicio de sesión ya sean exitoso o no desde el ultimo inicio del servicio.

select @@connections as 'Login Attempts'

Listo!

¿Cómo puedo revisar cuantos registros fantasmas tengo en una tabla?

Fácil, utilizando el campo ghost_record_count de la vista sys.dm_db_index_physical_stats. Este indica la cantidad de registros que el índice (leaf level) marcados para ser borrados, pero que todavía no han sido removidos por la tarea de “cleanup”.

Un ejemplo de cómo verlos:

SELECT 
db_name(database_id),
object_name(object_id),
ghost_record_count,
version_ghost_record_count
FROM sys.dm_db_index_physical_stats(DB_ID(N'db_name'),
 OBJECT_ID(N'table_name'), NULL, NULL , 'DETAILED');

Basado en la nota: http://j.mp/14NEnTa

Entre los problemas más comunes que me encuentro con las migraciones de SQL 2000 a 2005 o 2008 es que no todos los procesos se migrar a SSIS y quedan abandonados en los viejos Data Transformation Services
Esto implica que un usuario, digamos DBO de una base, no puede ejecutar su paquete al estilo:

dtsrun /n ElPaquete /s localhost  /u MONITOR /p *****

Presentando un mensaje similar a este:

Date		2012-09-07 11:43:09
Log		Job History (TableroIT)

Step ID		1
Server		SRV-MONITOR
Job Name		TableroIT_Usuarios_Portal
Step Name		Corre dts
Duration		00:00:01
Sql Severity		0
Sql Message ID		0
Operator Emailed		
Operator Net sent		
Operator Paged		
Retries Attempted		0

Message
Executed as user: SRV-MONITOR $. DTSRun:  Loading...      
Error:  -2147217911 (80040E09); Provider Error:  229 (E5)      
Error string:  The EXECUTE permission was denied on the object 
	'sp_get_dtspackage', database 'msdb', schema 'dbo'.      
Error source:  Microsoft OLE DB Provider for SQL Server      
Help file:        
Help context:  0.  
Process Exit Code 1.  
The step failed.

Esto es debido a la falta de permisos en la MSDB sobre los procedimientos de manipulación de DTSs.

¿Cómo lo arreglamos? Facil:

grant execute on sp_enum_dtspackagelog to monitor
grant execute on sp_enum_dtspackages to monitor
grant execute on sp_enum_dtssteplog to monitor
grant execute on sp_enum_dtstasklog to monitor
grant execute on sp_get_dtspackage to monitor
grant execute on sp_get_dtsversion to monitor
grant execute on sp_drop_dtspackage to monitor
grant execute on sp_add_dtspackage to monitor

Cuantas veces nos encontramos en medio de un mantenimiento debidamente programado donde nos olvidamos de algún proceso que se activa o algún usuario despistado que empieza a trabajar sobre el motor impidiéndonos seguir por algún motivo…

Este inconveniente es fácilmente salvable deshabilitando los usuarios y volviéndolos a habilitar al finalizar, ¿pero cómo?

Select 'ALTER LOGIN ['+ name + '] DISABLE ; '
from sys.server_principals
/* excluir cuentas deshabilitadas, sysadmins y ##-accounts */
where is_disabled = 0
and IS_SRVROLEMEMBER('sysadmin', name) = 0
and name not like '##%'
order by name ;
/* habilitar las deshabilitadas! */
Select 'ALTER LOGIN ['+ name + '] ENABLE ; '
from sys.server_principals
/* excluir cuentas deshabilitadas, sysadmins y ##-accounts */
where is_disabled = 0
and IS_SRVROLEMEMBER('sysadmin', name) = 0
and name not like '##%'
order by name ;

NOTA: Nunca bloquees los SQLAdmins… ;P

Fuente: SQLCentral.com

DECLARE @EmployeeDetails TABLE (EmpNo Int ,
                     EmpName Varchar(10),
                     EmpPlace Varchar(100))
                    
Insert into @EmployeeDetails Values(1,'samith',NULL)
Insert into @EmployeeDetails Values(2,'sreepathi','Kannur')
Insert into @EmployeeDetails Values(3,'Jamsheer','Calicut')
Insert into @EmployeeDetails Values(4,'Naseer',NULL)
Insert into @EmployeeDetails Values(5,'Rejith','Palakkad')

SELECT *
FROM @EmployeeDetails
WHERE EmpPlace <> 'Kannur'

La respuesta mas abajo…

Respuesta: ¡2! El valor NULL tambien coincide con la condicion en caso de operadores NOT (<>,Not in ,Not like..)

Fuente: sqlservercentral.com

Duda existencial a la hora de elegir un diccionario en la instalación de un SQL

Latin1_General_CI_AS:

  • Latin1-General
  • Case-insensitive
  • Accent-sensitive
  • Kana type-insensitive
  • Width-insensitive


SQL_Latin1_General_CP1_CI_AS
:

  • Latin1-General
  • Case-insensitive
  • Accent-sensitive
  • Kana type-insensitive
  • Width-insensitive for Unicode Data
  • SQL Server Sort Order 52 on Code Page 1252 for non-Unicode Data