62 lines
1.2 KiB
Transact-SQL
62 lines
1.2 KiB
Transact-SQL
-- Schema: dbo
|
|
-- Stored Procedure: sp_creatediagram
|
|
|
|
|
|
CREATE PROCEDURE dbo.sp_creatediagram
|
|
(
|
|
@diagramname sysname,
|
|
@owner_id int = null,
|
|
@version int,
|
|
@definition varbinary(max)
|
|
)
|
|
WITH EXECUTE AS 'dbo'
|
|
AS
|
|
BEGIN
|
|
set nocount on
|
|
|
|
declare @theId int
|
|
declare @retval int
|
|
declare @IsDbo int
|
|
declare @userName sysname
|
|
if(@version is null or @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');
|
|
revert;
|
|
|
|
if @owner_id is null
|
|
begin
|
|
select @owner_id = @theId;
|
|
end
|
|
else
|
|
begin
|
|
if @theId <> @owner_id
|
|
begin
|
|
if @IsDbo = 0
|
|
begin
|
|
RAISERROR (N'E_INVALIDARG', 16, 1);
|
|
return -1
|
|
end
|
|
select @theId = @owner_id
|
|
end
|
|
end
|
|
-- next 2 line only for test, will be removed after define name unique
|
|
if EXISTS(select diagram_id from dbo.sysdiagrams where principal_id = @theId and name = @diagramname)
|
|
begin
|
|
RAISERROR ('The name is already used.', 16, 1);
|
|
return -2
|
|
end
|
|
|
|
insert into dbo.sysdiagrams(name, principal_id , version, definition)
|
|
VALUES(@diagramname, @theId, @version, @definition) ;
|
|
|
|
select @retval = @@IDENTITY
|
|
return @retval
|
|
END
|
|
|