Генерируйте SQL, Создают Сценарии для существующих таблиц с Запросом

Шаблоны функций не могут быть частично специализированными (и никогда не могут быть). Концепции не меняют это правило.

Однако шаблоны функций могут быть перегружены (и всегда могут быть). И концепции делают делают это проще:

template <typename T>
void Bar() {
    std::cout << "Type T is not a hashtable" << std::endl;
}

template <Hashtable T>
void Bar() {
    std::cout << "Type T is a hashtable" << std::endl;
}

int main()
{
    Bar<Foo>();           // calls the first Bar
    Bar<std::string>();   // calls the second Bar
}

Мы говорим, что второй Bar является более ограниченным , чем первый Bar.

59
задан cweston 9 March 2019 в 19:55
поделиться

7 ответов

Вы подразумеваете, что хотите создать сценарий TSQL, который генерирует СОЗДАТЬ сценарий, или используйте Инструменты управления в Studio управления SQL-СЕРВЕРОМ для генерации Создать сценария?

Если это - последний, это, просто вопрос щелчка правой кнопкой по таблице и выбора Таблицы Сценария Как-> Создает К-> Новое Окно запроса.

Если Вы хотите целую заданную сценарием базу данных, то щелкните правой кнопкой по базе данных и выберите Задачи->, Генерируют Сценарии... и затем следуют за мастером

иначе это - вопрос выбора всех видов забавных вещей из различных системных таблиц.

16
ответ дан Stephen Wrighton 24 November 2019 в 18:06
поделиться
3
ответ дан John MacIntyre 24 November 2019 в 18:06
поделиться

Самый легкий путь состоит в том, чтобы использовать встроенную функцию Studio управления SQL.

Щелкните правой кнопкой по базе данных, перейдите к задачам, Генерируйте Сценарии и обход через мастер. Можно выбрать, какие объекты написать сценарий, и это сделает всем этим для Вас.

Теперь, при попытке сделать свой СОБСТВЕННЫЙ сценарий, чтобы сделать то же самое, Вы, вероятно, для большой работы...

0
ответ дан BradC 24 November 2019 в 18:06
поделиться

Так как мы предлагаем альтернативы тому, что Вы спросили..

Если Вы находитесь в .NET, необходимо посмотреть на Мастер Печати по базе данных в Visual Studio. Простой способ написать сценарий Ваших таблиц/данных к текстовому файлу.

http://www.codeplex.com/sqlhost/Wiki/View.aspx?title=Database%20Publishing%20Wizard

0
ответ дан madcolor 24 November 2019 в 18:06
поделиться

Используйте SSMS, самый легкий способ, которым можно настроить опции для него также (например, сопоставление, синтаксис, отбрасывание... создает),

Иначе Пакет Инструментов SSMS или DbFriend на CodePlex может помочь Вам генерировать сценарии

0
ответ дан jerryhung 24 November 2019 в 18:06
поделиться

«Самый простой способ - использовать встроенную функцию SQL Management Studio» но... Я решил это с помощью функции и нескольких процедур. Например, чтобы получить таблицу создания для таблицы с именем 'table_name', вы должны выполнить только процедуру sp_ppinScriptTabla:

Exec sp_ppinScriptTabla 'table_name'

Вот код сценария tsql:

Use Master
GO

Create Function sp_ppinTipoLongitud
(
    @xtype int,
    @length int,
    @isnullable int
)
Returns Varchar(512)
As 
Begin
    -- Función que a partir de un tipo de datos y una logitud, devuelve el texto del tipo.
    -- Por ejemplo: para xtype=varchar y length=10 devolverá "varchar(10)"
    Declare @ret varchar(512)
    Set @ret = ''

    Select @ret = t.name +
    Case When name in ('varchar', 'nvarchar', 'char', 'nchar') Then '(' + Convert(varchar, @length) + ')' Else '' End + ' ' +
    Case @isnullable When 1 Then 'NULL' Else 'NOT NULL' End
    From systypes t 
    Where t.xtype = @xtype

    Return @ret
End
GO

Create Procedure sp_ppinScriptLlavesForaneas
(
    @vchTabla sysname,
    @vchResultado varchar(8000) output
)
AS 
Begin

    DECLARE @tmpFK table(
        TablaF sysname,
        TablaR sysname,
        ColF sysname,
        ColR sysname,
        FKName sysname)

    -- obtengo las llaves foraneas en @vchForeign
    Declare @vchForeign varchar(8000), @FKName sysname, @vchColumnasF varchar(4000), @vchColumnasR varchar(4000), @ColF sysname, @ColR sysname
    Declare @vchTemp varchar(1000), @TablaR sysname

    Insert into @tmpFK
    Select TablaF.name AS TablaF, TablaR.name AS TablaR, ColF.name AS ColF, ColR.name AS ColR, ofk.name AS FKName
    From sysforeignkeys fk, sysobjects ofk, sysobjects TablaF, sysobjects TablaR, 
    syscolumns ColF, syscolumns ColR
    Where TablaF.name = @vchTabla
    And ofk.id = fk.constid
    And TablaF.id = fk.fkeyid
    And TablaR.id = fk.rkeyid
    And ColF.id = TablaF.id And ColF.colid = fk.fkey
    And ColR.id = TablaR.id And ColR.colid = fk.rkey
    order by FKName

    Set @vchForeign = ''
    While Exists ( Select * From @tmpFK )
    Begin
        Select Top 1 @FKName = FKName From @tmpFK
        Set @vchColumnasF = ''
        Set @vchColumnasR = ''
        While Exists ( Select * From @tmpFK Where FKName = @FKName )
        Begin
            Select Top 1 @ColF = ColF, @ColR = ColR, @TablaR = TablaR From @tmpFK Where FKName = @FKName
            Delete From @tmpFK Where ColF = @ColF And ColR = @ColR And TablaR = @TablaR And FKName = @FKName
            Set @vchColumnasF = @vchColumnasF + @ColF + ', '
            Set @vchColumnasR = @vchColumnasR + @ColR + ', '
        End

        Set @vchColumnasF = LEFT(@vchColumnasF, LEN(@vchColumnasF) - 1)
        Set @vchColumnasR = LEFT(@vchColumnasR, LEN(@vchColumnasR) - 1)
        Set @vchTemp = 'Constraint ' + @FKName + ' Foreign Key (' + @vchColumnasF + ') '
        Set @vchTemp = @vchTemp + 'References ' + @TablaR + ' (' + @vchColumnasR + ')'
        Set @vchForeign = @vchForeign + char(9) + @vchTemp + ',' + char(13) 
    End

    Select @vchResultado = Case When Len(@vchForeign) >=2 Then Left(@vchForeign, Len(@vchForeign) - 2) Else @vchForeign End
End
GO

Create Procedure sp_ppinScriptTabla
(
    @vchTabla sysname
)
AS

Set nocount on

-- Obtengo las foreign keys
Declare @foreign varchar(8000)
Exec sp_ppinScriptLlavesForaneas @vchTabla, @foreign output

-- SELECT que devuelve el script de Create Table de la tabla
Select 'Create ' + 
Case o.xtype When 'U' Then 'Table' When 'P' Then 'Procedure' Else '??' End + ' ' +
@vchTabla + char(13) + '('
From sysobjects o
Where o.name = @vchTabla
Union all
-- Campos + identitys + DEFAULTS
select char(9) + c.name + ' ' +                                 -- Nombre
dbo.sp_ppinTipoLongitud(t.xtype, c.length, c.isnullable) +          -- Tipo(longitud)
Case When c.colstat & 1 = 1                                     -- Identity (si aplica)
    Then ' Identity(' + convert(varchar, ident_seed(@vchTabla)) + ',' + Convert(varchar, ident_incr(@vchTabla)) + ')' 
    Else '' 
End + 
Case When not od.name is null                                   -- Defaults (si aplica)
    Then ' Constraint ' + od.name + ' Default ' + replace(replace(cd.text, '((', '('), '))', ')')
    Else ''
End + ', '
from sysobjects o, syscolumns c
LEFT OUTER JOIN sysobjects od On od.id = c.cdefault LEFT OUTER join syscomments cd On cd.id = od.id, 
systypes t
where o.id = object_id(@vchTabla)
and o.id = c.id
and c.xtype = t.xtype
Union all
-- Primary Keys y Unique keys
select char(9) + 'Constraint ' + o.name + ' ' +
Case o.xtype When 'PK' Then 'Primary Key' Else 'Unique' End + ' ' +
dbo.sp_ppinCamposIndice (db_name(), @vchTabla, i.indid) + ', '
from sysobjects o, sysindexes i
where o.parent_obj = object_id(@vchTabla)
and o.xtype in ('PK','UQ')
and i.id = o.parent_obj
and o.name = i.name
Union all
-- Check constraints
select char(9) + 'Constraint ' + o.name + ' Check ' + c.text + ', '
from sysobjects o, syscomments c
where o.parent_obj = object_id(@vchTabla)
and o.xtype in ('C')
and o.id = c.id
Union all
-- Foreign keys
Select @foreign
Union all
Select ')'

Set nocount off
GO
3
ответ дан Federico Colombo 24 November 2019 в 18:06
поделиться

Вы забыли включить сохраненную процедуру или функциональный скрипт для SP_PPINCAMPOSINDICE

2
ответ дан 24 November 2019 в 18:06
поделиться