SQL Server - Procedimiento generador de Scripts

 
Vista:
sin imagen de perfil

Procedimiento generador de Scripts

Publicado por Eva (1 intervención) el 10/11/2012 03:57:57
Hola!!!!
Necesito ayuda para resolver una consigna de base de datos y no soy experta ni mucho menos a penas si tengo una nociòn general pero los procedimientos me cuestan muchisimo.
El enunciado es el siguiente:
Realizar un procedimiento llamado p_GenerarScriptTabla (<esquema>,<nombre tabla>) que permita devolver el script de una tabla en particular (en la creacion deben incorporarse las KEYS, CONSTRAINTS e INDICES asociados a la tabla).
Por ejemplo, si le pasamos por parametro la tabla Person.ContacType (AdventureWorks), deberia devolvernos la siguiente salida:
CREATE TABLE Person.ContactType
(ContactTypeID int IDENTITY(1,1) NOT NULL,
Name dbo.Name NOT NULL,
ModifiedDate DATETIME NOT NULL
CONSTRAINT DF_ContactType_ModifiedDate DEFAULT (GETDATE()),
CONSTRAINT DF_ContactType_ContactTypeID PRIMARY KEY CLUSTERED(ContactTypeID))

Aclaraciones: Todos los tipos de constraints, por ejemplo DEFAULT, FK. No hacer indices. Todos los tipos de datos (comunes como los de user), el tamaño indicado, si permite null o no (si creo la tabla desde el SQL mi script deberia quedar igual). En las PK deben indicar el tipo clave y si la clave tiene varios campos considerarlo y en el orden adecuado. Considerar campos IDENTITY.

Me dijeron que lo mas conveniente es que use cursores.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Procedimiento generador de Scripts

Publicado por Isaias (4558 intervenciones) el 12/11/2012 20:53:12
Veamos si esto sirve:

USE [master]
GO

/****** Object: StoredProcedure [dbo].[ScriptGenerator] Script Date: 11/03/2010 09:40:25 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



/****** Object: Stored Procedure dbo.proc_genscript Script Date: 5/8/2003 11:06:53 AM ******/

CREATE
PROCEDURE [dbo].[ScriptGenerator]

@ServerName varchar(30),

@Database varchar(30),

@ObjectName varchar(50),

@ObjectType varchar(10),

@TableName varchar(50),

@ScriptFile varchar(255)

AS

DECLARE
@CmdStr varchar(255)

DECLARE
@object int

DECLARE
@hr int

SET
NOCOUNT ON

SET
@CmdStr = 'Connect('+@ServerName+')'

EXEC
@hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT

--Comment out for standard login

EXEC
@hr = sp_OASetProperty @object, 'LoginSecure', TRUE

/* Uncomment for Standard Login

EXEC @hr = sp_OASetProperty @object, 'Login', 'sa'

EXEC @hr = sp_OASetProperty @object, 'password', 'sapassword'

*/

EXEC
@hr = sp_OAMethod @object,@CmdStr

SET
@CmdStr =

CASE @ObjectType

WHEN 'Database' THEN 'Databases("'

WHEN 'Procedure' THEN 'Databases("' + @Database + '").StoredProcedures("'

WHEN 'Function' THEN 'Databases("' + @Database + '").UserDefinedFunctions("'

WHEN 'View' THEN 'Databases("' + @Database + '").Views("'

WHEN 'Table' THEN 'Databases("' + @Database + '").Tables("'

WHEN 'Index' THEN 'Databases("' + @Database + '").Tables("' + @TableName + '").Indexes("'

WHEN 'Trigger' THEN 'Databases("' + @Database + '").Tables("' + @TableName + '").Triggers("'

WHEN 'Key' THEN 'Databases("' + @Database + '").Tables("' + @TableName + '").Keys("'

WHEN 'Check' THEN 'Databases("' + @Database + '").Tables("' + @TableName + '").Checks("'

WHEN 'Job' THEN 'Jobserver.Jobs("'

END

SET
@CmdStr = @CmdStr + @ObjectName + '").Script(5,"' + @ScriptFile + '")'

EXEC
@hr = sp_OAMethod @object, @CmdStr

EXEC
@hr = sp_OADestroy @object

GO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar