Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sentencia para generar un script (https://www.clubdelphi.com/foros/showthread.php?t=91415)

edigol21 31-01-2017 20:45:58

Sentencia para generar un script
 
Necesito saber si hay una manera que por medio de sentencia SQL server se puede generar un script de estructura y datos.

Casimiro Notevi 31-01-2017 21:42:42

¿Para qué base de datos?

AgustinOrtu 31-01-2017 22:03:53

Podes usar SQL Management Studio

https://msdn.microsoft.com/en-us/library/hh245282.aspx
https://technet.microsoft.com/en-us/...=sql.105).aspx

edigol21 01-02-2017 04:05:14

Script SQL Server
 
Mi base de datos es Microsoft SQL SERVER 2014, necesito saver si hay alguna manera que por medio de una sentencia de SQL generar un script de datos y estructura Gracias.

AgustinOrtu 01-02-2017 05:20:54

Leiste los links de arriba? Porque con SQL Management Studio se puede hacer lo que necesitas

olbeup 01-02-2017 08:22:57

Hola edigol21,

Como bien dice AgustinOrtu, uso el "SQL Management Studio" versión "2012" para generar la SQL y después la paso a delphi ya depurada y funcional, el "SQL Management Studio" te puede generar automáticamente la SQL pulsando en el boton derecha encima de la tabla y selecionar la opción "Incluir tabla como" y eliges unas de las opciones que te da si es lo que buscas.

Un saludo.

Neftali [Germán.Estévez] 01-02-2017 09:19:54

1 Archivos Adjunto(s)
Cita:

Empezado por AgustinOrtu (Mensaje 512859)
...con SQL Management Studio se puede hacer lo que necesitas

Me ha parecido entender, que quiere hacerlo desde un programa Delphi con sentencias SQL (?¿?¿).

Si es así, que yo sepa Transact-SQL, no tiene estos commandos.
De todas formas, hay otras opciones. Si usas este script que te adjunto, puedes crear un Stored Procedure para generar los INSERTs de una tabla.

Basta con ejecutar un código como este:

Código SQL [-]
EXEC sp_generate_inserts 'postal'

Y obtendrás un resultado como este:

Cita:

INSERT INTO [postal] ([CODIGO],[CODPROVI],[IDPOSTAL],[KM],[PUEBLO])VALUES('08901',' 08',1,0.0000,'Hospitalet de Llobregat')
INSERT INTO [postal] ([CODIGO],[CODPROVI],[IDPOSTAL],[KM],[PUEBLO])VALUES('08901',' 08',2,0.0000,'Barcelona')
Para los CREATE de las tablas, tendrás que buscar algo similar.

Neftali [Germán.Estévez] 01-02-2017 09:32:49

Vale.
Aquí puedes encontrar este script, que te genera los CREATE para las tablas de la Base de Datos.
Este no lo he probado.

Código SQL [-]
select  'create table [' + so.name + '] (' + o.list + ')' + CASE WHEN tc.Constraint_Name IS NULL THEN '' ELSE 'ALTER TABLE ' + so.Name + ' ADD CONSTRAINT ' + tc.Constraint_Name  + ' PRIMARY KEY ' + ' (' + LEFT(j.List, Len(j.List)-1) + ')' END
from    sysobjects so
cross apply
    (SELECT 
        '  ['+column_name+'] ' + 
        data_type + case data_type
            when 'sql_variant' then ''
            when 'text' then ''
            when 'ntext' then ''
            when 'xml' then ''
            when 'decimal' then '(' + cast(numeric_precision as varchar) + ', ' + cast(numeric_scale as varchar) + ')'
            else coalesce('('+case when character_maximum_length = -1 then 'MAX' else cast(character_maximum_length as varchar) end +')','') end + ' ' +
        case when exists ( 
        select id from syscolumns
        where object_name(id)=so.name
        and name=column_name
        and columnproperty(id,name,'IsIdentity') = 1 
        ) then
        'IDENTITY(' + 
        cast(ident_seed(so.name) as varchar) + ',' + 
        cast(ident_incr(so.name) as varchar) + ')'
        else ''
        end + ' ' +
         (case when IS_NULLABLE = 'No' then 'NOT ' else '' end ) + 'NULL ' + 
          case when information_schema.columns.COLUMN_DEFAULT IS NOT NULL THEN 'DEFAULT '+ information_schema.columns.COLUMN_DEFAULT ELSE '' END + ', ' 

     from information_schema.columns where table_name = so.name
     order by ordinal_position
    FOR XML PATH('')) o (list)
left join
    information_schema.table_constraints tc
on  tc.Table_name       = so.Name
AND tc.Constraint_Type  = 'PRIMARY KEY'
cross apply
    (select '[' + Column_Name + '], '
     FROM   information_schema.key_column_usage kcu
     WHERE  kcu.Constraint_Name = tc.Constraint_Name
     ORDER BY
        ORDINAL_POSITION
     FOR XML PATH('')) j (list)
where   xtype = 'U'
AND name    NOT IN ('dtproperties')

En ese mismo hilo tienes más opcines, pero esta parece que genera cosas correctas.

Cita:

create table [Customer] ( [Id] int IDENTITY(1,1) NOT NULL , [FirstName] nvarchar(40) NOT NULL , [LastName] nvarchar(40) NOT NULL , [City] nvarchar(40) NULL , [Country] nvarchar(40) NULL , [Phone] nvarchar(20) NULL , )ALTER TABLE Customer ADD CONSTRAINT PK_CUSTOMER PRIMARY KEY ([Id])
create table [Order] ( [Id] int IDENTITY(1,1) NOT NULL , [OrderDate] datetime NOT NULL DEFAULT (getdate()), [OrderNumber] nvarchar(10) NULL , [CustomerId] int NOT NULL , [TotalAmount] decimal(12, 2) NULL DEFAULT ((0)), )ALTER TABLE Order ADD CONSTRAINT PK_ORDER PRIMARY KEY ([Id])
create table [OrderItem] ( [Id] int IDENTITY(1,1) NOT NULL , [OrderId] int NOT NULL , [ProductId] int NOT NULL , [UnitPrice] decimal(12, 2) NOT NULL DEFAULT ((0)), [Quantity] int NOT NULL DEFAULT ((1)), )ALTER TABLE OrderItem ADD CONSTRAINT PK_ORDERITEM PRIMARY KEY ([Id])
create table [Product] ( [Id] int IDENTITY(1,1) NOT NULL , [ProductName] nvarchar(50) NOT NULL , [SupplierId] int NOT NULL , [UnitPrice] decimal(12, 2) NULL DEFAULT ((0)), [Package] nvarchar(30) NULL , [IsDiscontinued] bit NOT NULL DEFAULT ((0)), )ALTER TABLE Product ADD CONSTRAINT PK_PRODUCT PRIMARY KEY ([Id])
create table [Supplier] ( [Id] int IDENTITY(1,1) NOT NULL , [CompanyName] nvarchar(40) NOT NULL , [ContactName] nvarchar(50) NULL , [ContactTitle] nvarchar(40) NULL , [City] nvarchar(40) NULL , [Country] nvarchar(40) NULL , [Phone] nvarchar(30) NULL , [Fax] nvarchar(30) NULL , )ALTER TABLE Supplier ADD CONSTRAINT PK_SUPPLIER PRIMARY KEY ([Id])

bitbow 01-02-2017 15:54:37

Aunque no me queda claro exactamente que quieres realizar, te comento.

Desde el SQL Server puedes auto generar scripts y ejecutarlos dentro de un procedimiento:

DECLARE
@sql nvarchar(1000)SET @sql='CREATE TABLE TEMPORAL
( ID int IDENTITY, DATO varchar(100))'
EXEC (@sql)

SET @sql = 'SELECT * FROM TEMPORAL'
EXEC (@sql)
Este tipo de sentencias las puedes meter dentro de un procedimiento almacenado con la logica de lo que quieres realizar (crear tablas en base a un resultado de un query, insertar registro, actualizar).

Saludos.

edigol21 01-02-2017 23:46:51

Sql Server 2012
 
buenas tarde.
lo que me sucede es que solo tengo instalado el Motor de SQL Server 2012 y lo que necesito es generar un script completo de una base de datos con estructura y datos desde el delphi con una sentencia ejecutándolo en un TFDQuery

bitbow 02-02-2017 00:08:03

Revisa si el SQL server tiene opcion de linea de comandos (lo desconozco), si es asi desde delphi puedes hacer un shellexecute para ejecutarlo y generar un bak (si es que te sirve asi), de lo contrario se me ocurre algun cliente como navicat o dbeaver para generar el script completo de base de datos.

Saludos.

AgustinOrtu 02-02-2017 07:51:33

Fijate si este programa te sirve

Open DBDiff


La franja horaria es GMT +2. Ahora son las 09:54:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi