SQL 2008 incluye una nueva vista en MSDB que permite ver el historial de ejecución de la verificación de políticas definidas por el Policy Management Framework
select * from syspolicy_policy_execution_history_details
Trae un detalle como el siguiente

Saludos,
Eduardo Castro - Comunidad Windows - http://mswindowscr.org
Technorati Tags:
SQL Server 2008
Si se tienen que insertar más de una fila dentro de una tabla, usualmente se ejecuta el insert o procedimiento almacenado tantas veces como filas tenga, con los table valued parameters se pueden enviar múltiples filas de datos dentro un mismo TSQL sin necesidad de crear tablas temporales o haciendo múltiples llamadas.
Los Table Valued-Parameters son nuevos en SQL 2008
Primero tienes que crear el tipo que se va insertar
CREATE TYPE tipo_linea (consecutivo INT, _id INT, producto INT, cantidad INT);
Después se crea un procedimiento almacenado que recibe como parámetro ese tipo
CREATE PROC InsertarIventario (@_id INT, @datos_por_insertar tipo_linea)
AS
INSERT INTO tablainventario VALUES (@_id ... ) ;
INSERT INTO detalleinventario
SELECT * FROM @datos_por_insertar;
Slds
Eduardo Castro Comunidad Windows http://mswindowscr.org
Technorati Tags:
SQL Server 2008
Greg Liwood escribió un procedimiento para detectar los índices duplicados en SQL Server, lo cual ayuda a mejorar el desempeño.
exec sp_MSForEachTable 'usp_duplicateindexes''?'''
Here's the proc script:
USE master
GO
create procedure [dbo].[usp_duplicateindexes]
@tablename varchar(255)
as
set nocount on
print @tablename
--dump sp_helpindex into temp table
if object_id('tempdb..#helpindex') > 0 drop table #helpindex
create table #helpindex (
index_name varchar (900) not null primary key
, index_description varchar (1000) null
, index_keys varchar (1000) null)
insert #helpindex exec sp_helpindex @tablename
--add [inccols] to temp table & cursor over output, adding included col defs
alter table #helpindex add inccols varchar(1000) null
declare cr cursor for
select si.name, sc.name
from sysobjects so
join sysindexes si on so.id = si.id
join sys.index_columns ic on si.id = ic.object_id and si.indid = ic.index_id
join sys.columns sc on ic.object_id = sc.object_id and ic.column_id = sc.column_id
where so.xtype = 'U'
and so.name = @tablename
and ic.is_included_column = 1
order by si.name, ic.index_column_id
declare @siname varchar(1000), @scname varchar(1000)
open cr
fetch next from cr into @siname, @scname
while @@fetch_status = 0
begin
update #helpindex set inccols = isnull(inccols , '') + @scname + ', ' where index_name = @siname
fetch next from cr into @siname, @scname
end
update #helpindex set inccols = left(inccols, datalength(inccols) - 2) where right(inccols, 2) = ', '
close cr
deallocate cr
--dump duplicates into second temp table & pump results if there are any
if object_id('tempdb..#helpindex2') > 0 drop table #helpindex2
create table #helpindex2 (
index_name varchar (900) not null primary key
, index_description varchar (1000) null
, index_keys varchar (1000) null
, inccols varchar(1000) null
)
insert into #helpindex2
select hi.index_name, hi.index_description, hi.index_keys, hi.inccols
from #helpindex hi
join #helpindex h2 on hi.index_keys=h2.index_keys
and hi.index_description=h2.index_description
and hi.index_name<>h2.index_name
if @@rowcount > 0
select @tablename as "tablename", * from #helpindex2 order by index_name, index_keys, inccols
--cleanup temp objects
if object_id('tempdb..#helpindex2') > 0 drop table #helpindex2
if object_id('tempdb..#helpindex') > 0 drop table #helpindex
Slds
Eduardo Castro - Comunidad Windows http://mswindowscr.org
Antes de que llegara el Microsoft SQL Server 2005 al mercado, si usted deseaba que alguien tuviera acceso a ver, modificar, crear y ejecutar los SQL Server Agent Jobs, necesitaba darle permisos de Systems Administrator al login deseado de SQL Server, con el inconveniente que de también le iba a permitir hacer lo que deseara en esa instancia.
A partir del SQL Server 2005, se incluyeron los siguientes 3 roles:
SQLAgentUserRole: Los usuarios pueden crear jobs y manejar solo los jobs que ellos han creado.
SQLAgentReaderRole: Van a tener los privilegios del rol SQLAgentUserRole junto con la habilidad de enumerar y ver el historial de todos los jobs.
SQLAgentOperatorRole: Van a tener los mismos privilegios del rol SQLAgentReaderRole junto con la habilidad de ejecutar jobs locales de los cuales ellos no son dueños.
El procedimiento para asignarle permisos a un login en alguno de esos roles es el siguiente:
1. Agregue el usuario deseado a la base de datos "msdb":
USE [msdb]
GO
CREATE USER [MyUser] FOR LOGIN [MyUser]
GO
2. Asigne el rol deseado al usuario:
USE [msdb]
GO
EXEC sp_addrolemember 'SQLAgentUserRole', 'MyUser'
GO
Aporte de Hector Bejarano - http://citicr.org
Una de las grandes mejoras que recibió el Microsoft SQL Server 2008 es la capacidad de poder comprimir backups de manera nativa. Lo mejor de todo es que se puede lograr de una manera muy sencilla, solo necesita especificar COMPRESSION en la cláusula WITH del comando BACKUP. Por ejemplo:
BACKUP DATABASE Adventureworks
TO DISK = 'C:\Advc.bak'
WITH INIT, COMPRESSION
Para que tenga una idea del beneficio de esta nueva funcionalidad, si usted hace un backup de la base de datos ejemplo de SQL Server 2005 y SQL Server 2008 llamada "AdventureWorks", notará que un backup normal demanda 129 MB (hecho en 7.5 segundos) de espacio contra 35 MB (hecho en 3.8 segundos) cuando utiliza la compresión.
Por otra parte, cuando usted quiere restaurar no de estos backups, no necesita especificar nada adicional al comando de restore (La restauración del backup normal tomó 10.4 segundos contra 6.3 del backup comprimido).
Aporte de Hector Bejarano - http://citicr.org