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.

¿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