IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID('[dbo].[sp_helpdiagramdefinition]') AND type = 'P')
DROP PROCEDURE [dbo].[sp_helpdiagramdefinition]
GO

CREATE PROCEDURE dbo.sp_helpdiagramdefinition
(
@diagramname sysname,
@owner_idint= null 
)
WITH EXECUTE AS N'dbo'
AS
BEGIN
set nocount on

declare @theId int
declare @IsDbo int
declare @DiagIdint
declare @UIDFoundint

if(@diagramname is null)
begin
RAISERROR (N'E_INVALIDARG', 16, 1);
return -1
end

execute as caller;
select @theId = DATABASE_PRINCIPAL_ID();
select @IsDbo = IS_MEMBER(N'db_owner');
if(@owner_id is null)
select @owner_id = @theId;
revert; 

select @DiagId = diagram_id, @UIDFound = principal_id from dbo.sysdiagrams where principal_id = @owner_id and name = @diagramname;
if(@DiagId IS NULL or (@IsDbo = 0 and @UIDFound <> @theId ))
begin
RAISERROR ('Diagram does not exist or you do not have permission.', 16, 1);
return -3
end

select version, definition FROM dbo.sysdiagrams where diagram_id = @DiagId ; 
return 0
END