Generar secuencia de comandos SQL

Bienvenidos a nuevo tutorial, hoy aprenderemos generar secuencia de comandos SQL,
¿Para qué nos sirve esto?
Esta función tiene infinitas utilidades, en este tutorial la usaremos para pasar "columnas" con sus respectivos tipos de datos, de una base de datos a otra.

1)En este tutorial simularemos tener dos bases de datos restauradas, a una la llamaremos "DB_Anterior" y a la otra la llamaremos "DB_Nueva"
En la DB_Anterior, simularemos tener muchas columnas en la tabla "Character" que queremos pasar a la DB_Nueva.
Entonces lo primero que haremos será ingresar a la "Db_Anterior" => "Tablas" => "Character" => "Todas las tareas" => "Generar secuencia de comandos SQL"

Generar secuencia desde SQL server 2000

2)Lo que haremos en nuestra nueva ventana, será simplemente un clic en "Aceptar"

Generador de secuencias

3)Ahora debemos seleccionar un lugar para guardar nuestra secuencia.
Lo que haremos será en donde dice *.sql , borran el * y ponerle un nombre al archivo, en este caso lo llamaré muonlinetutorial.sql
Luego tildamos la opción "Guardar"

Seleccionando destino para guardar la secuencia

4)Lo que hemos generado es una secuencia de comandos SQL.
En ella contenemos toda las columnas con sus propiedades (Atención: no contiene datos ni tampoco información de su DB, para eso deben usar los anteriores tutoriales en donde vimos como exportar o importar tablas con su respectiva información)

Secuencia generada

5)Entonces, en el archivo muonlinetutorial.sql tenemos todas las columnas con sus propiedades.
Si corremos esta querry en el analizador de consultas, tendremos como resultado lo siguiente:
Al correr dicha consulta, lo que hara será un drop de la tabla "Character" y crearla de nuevo con estas nuevas columnas.
Esto lo hariamos en el caso de querer mantener la originalidad de la tabla character de la DB_Anterior en la DB_Nueva.
Pero talvez lo que necesitemos sea crear algunas columnas de la DB_Anterior en la DB_Nueva, de esta forma mantendríamos nuestros datos actuales y anexaríamos las columnas faltantes (Ya sea por que las necesitamos para una página web, o porque cambiamos de versión, etc)
Supongamos lo siguiente:
En la Db_Anterior tenemos estas columnas:

[AccountID] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Name] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[cLevel] [int] NULL ,
[LevelUpPoint] [int] NULL ,
[Class] [tinyint] NULL ,
[Experience] [int] NULL ,
[Strength] [int] NULL ,
[Dexterity] [int] NULL ,
[Vitality] [int] NULL ,
[Energy] [int] NULL ,
[Inventory] [varbinary] (3776) NULL ,
[MagicList] [varbinary] (180) NULL ,
[Money] [int] NULL ,
[Life] [real] NULL ,
[MaxLife] [real] NULL ,
[Mana] [real] NULL ,
[MaxMana] [real] NULL ,
[MapNumber] [smallint] NULL ,
[MapPosX] [smallint] NULL ,
[MapPosY] [smallint] NULL ,
[MapDir] [tinyint] NULL ,
[PkCount] [int] NULL ,
[PkLevel] [int] NULL ,
[PkTime] [int] NULL ,
[MDate] [smalldatetime] NULL ,
[LDate] [smalldatetime] NULL ,
[CtlCode] [tinyint] NULL ,
[DbVersion] [tinyint] NULL ,
[Quest] [varbinary] (50) NULL ,
[Leadership] [int] NULL ,
[ChatLimitTime] [smallint] NULL ,
[FruitPoint] [int] NULL ,
[zs_count] [int] NULL ,
[ZY] [int] NULL ,
[FQBZ] [int] NULL ,
[FQCount] [int] NULL ,
[FQName] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[Resets] [int] NOT NULL ,
[mu_id] [int] IDENTITY (1, 1) NOT NULL ,
[SCFPCPoints] [int] NULL ,
[SCFMarried] [int] NOT NULL ,
[SCFMarryHusbandWife] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[SCFMasterLevel] [int] NOT NULL ,
[SCFMasterPoints] [int] NOT NULL ,
[SCFMasterSkills] [varbinary] (300) NULL ,
[SCFCustomQuest] [varbinary] (512) NULL ,
[SCFGensFamily] [smallint] NOT NULL ,
[SCFGensContribution] [int] NOT NULL ,
[SCFGensRank] [int] NOT NULL ,
[SCFGensDateLeave] [smalldatetime] NULL ,
[SCFGensRecvReward] [tinyint] NOT NULL ,
[Grand_Resets] [int] NOT NULL ,
[SCFMasterSkill] [varbinary] (240) NULL ,
[SCFExtInventory] [tinyint] NOT NULL ,
[SCFUpdatedPShop] [tinyint] NOT NULL ,
[SCFSealItem] [int] NOT NULL ,
[SCFSealTime] [int] NOT NULL ,
[SCFScrollItem] [int] NOT NULL ,
[SCFScrollTime] [int] NOT NULL
Y en la DB_Nueva tenemos estas columnas:
[AccountID] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[cLevel] [smallint] NULL ,
[LevelUpPoint] [int] NULL ,
[Class] [tinyint] NULL ,
[Experience] [int] NULL ,
[Strength] [smallint] NULL ,
[Dexterity] [smallint] NULL ,
[Vitality] [smallint] NULL ,
[Energy] [smallint] NULL ,
[Inventory] [varbinary] (760) NULL ,
[MagicList] [varbinary] (60) NULL ,
[Money] [int] NULL ,
[Life] [real] NULL ,
[MaxLife] [real] NULL ,
[Mana] [real] NULL ,
[MaxMana] [real] NULL ,
[MapNumber] [smallint] NULL ,
[MapPosX] [smallint] NULL ,
[MapPosY] [smallint] NULL ,
[MapDir] [tinyint] NULL ,
[PkCount] [int] NULL ,
[PkLevel] [int] NULL ,
[PkTime] [int] NULL ,
[MDate] [smalldatetime] NULL ,
[LDate] [smalldatetime] NULL ,
[CtlCode] [tinyint] NULL ,
[DbVersion] [tinyint] NULL ,
[Quest] [varbinary] (50) NULL ,
[Reset] [int] NOT NULL
Como pueden observar, la DB_Anterior posee mayor cantidad de columnas que la DB_Nueva, entonces para pasar solamente las columnas que faltan en esta útlima lo que haremos será lo siguiente:
Anteriormente habíamos generado una secuencia de comandos SQL a la cual yo llame muonlinetutoriales.sql, abrimos eso con el notepad o cualquier procesador de textos y de manera inmediata borramos lo siguiente:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Character]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Character]
GO

CREATE TABLE [dbo].[Character] (
De esta forma evitamos que al correr la querry no nos borre la tabla character de la DB_Nueva
Luego al final borramos esto que sería el cierre del código
) ON [PRIMARY]
GO
Literalmente nos quedaría algo asi:

Secuencia modificada

6)Lo que vimos entonces en la anterior imagen son tan sólo las columnas (Sin instruciones).
Lo que debemos hacer ahora, es una simple observación comparando las columnas que nos sobran en la DB_Anterior y que nos faltan en la DB_Nueva, en este caso es muy fácil, si prestan atención verán que en la DB_Anterior tenemos un listado de 29 columnas más, estas son las siguientes:
[mu_id] [int] IDENTITY (1, 1) NOT NULL ,
[SCFPCPoints] [int] NULL ,
[SCFMarried] [int] NOT NULL ,
[SCFMarryHusbandWife] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[SCFMasterLevel] [int] NOT NULL ,
[SCFMasterPoints] [int] NOT NULL ,
[SCFMasterSkills] [varbinary] (300) NULL ,
[SCFCustomQuest] [varbinary] (512) NULL ,
[SCFGensFamily] [smallint] NOT NULL ,
[SCFGensContribution] [int] NOT NULL ,
[SCFGensRank] [int] NOT NULL ,
[SCFGensDateLeave] [smalldatetime] NULL ,
[SCFGensRecvReward] [tinyint] NOT NULL ,
[Grand_Resets] [int] NOT NULL ,
[SCFMasterSkill] [varbinary] (240) NULL ,
[SCFExtInventory] [tinyint] NOT NULL ,
[SCFUpdatedPShop] [tinyint] NOT NULL ,
[SCFSealItem] [int] NOT NULL ,
[SCFSealTime] [int] NOT NULL ,
[SCFScrollItem] [int] NOT NULL ,
[SCFScrollTime] [int] NOT NULL
[Leadership] [int] NULL ,
[ChatLimitTime] [smallint] NULL ,
[FruitPoint] [int] NULL ,
[zs_count] [int] NULL ,
[ZY] [int] NULL ,
[FQBZ] [int] NULL ,
[FQCount] [int] NULL ,
[FQName] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL

Pasando tablas faltantes

7)Esas columnas las aislamos del código y las pegamos en nuestro "Analizador de consultas" (Recuerden seleccionar arriba la base de datos en donde quieran anexar o agregar las columnas)
Luego delante del nombre de cada columna agregan lo siguiente:
ALTER TABLE character ADD
¿Qué función tiene este fragmento?
Esto lo que hará será "Modificar/Alterar" la tabla character agregando esas columnas que tenemos en el listado"
Importante: si copiaron las columnas del archivo .txt es posible que tengan una "," al final de cada columna, eso deberán borrarlo también sino al correr la querry tendrán un error.
Una vez que finalizamos, hacemos un clic en boton "Ejecutar" o aprentan "F5"

Analizador de consultas

Con eso hemos creado todas las columnas faltantes en nuestra DB_Nueva.
Si al momento de ejecutar la consulta, nos arroja este error:
ALTER TABLE sólo permite agregar columnas que contengan valores Null o que tengan la definición DEFAULT. La columna 'El nombre de la columna' no se puede agregar a la tabla 'El nombre de tu tabla' porque no permite valores Null y no especifica la definición DEFAULT.
Lo que deben hacer es buscar la columna que menciona el error (Este nombre dependerá de la tabla con la que esten trabajando) y agregar despues del NULL lo siguiente
DEFAULT 0
Entonces, por ejemplo si tenemos la siguiente columna con el error
ALTER TABLE character ADD [SCFGensFamily] [smallint] NOT NULL
Le agregamos lo mencionado anteriormente de modo tal que nos quedará asi:
ALTER TABLE character ADD [SCFGensFamily] [smallint] NOT NULL DEFAULT 0
Recuerden que antes de trabajar deben generar backups de sus bases de datos por si algo les sale mal.
Tambien más adelante trabajaremos esto de manera más simplificada sin necesidad de agregar tantas instrucciónes ni complicarnos con la sintaxís.
Character_Db_Nueva.sql [1 kb]

¿Necesitas ayuda? Visita www.iceventas.com y nosotros lo hacemos por ti.

Se han publicado un total de 0 comentarios en Mu Online Tutoriales :

Publicar un comentario en la entrada