Как создать скрипт для создания таблицы - PullRequest
0 голосов
/ 25 июня 2018

Я использую SQL Server Management Studio 2017.У меня есть стол в моей локальной машине.Допустим, его зовут Email.Внутри таблицы Email есть имя столбца Language, и его значение может быть 'en' или 'zh'.Помимо этого столбца Language есть еще несколько столбцов.

Теперь у моего коллеги также есть та же таблица, но другая машина, и у него есть только строки, в которых Language равно en.У него пока нет строк, где Language - zh.

Как я могу использовать это программное обеспечение для генерации сценария SQL для вставки данных в его таблицу, но только со строками where Language = 'zh', чтобы обе таблицы моглибыть таким же.

Чтобы быть более ясным, мне нужно отправить ему сценарий INSERT, в котором также содержатся значения данных, чтобы он мог использовать INSERT для своей базы данных на своем локальном компьютере.

Или это как-то еще?

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Есть несколько способов - первый быстрый и не требует кода, но вам нужно вручную избавиться от ненужных вам строк, другой более гибкий, но вы должны его кодировать.Есть также сторонние инструменты, которые вы можете сделать, чтобы сделать это для вас.

Если вы просто хотите сделать это один раз, вы можете сделать следующее (это из другой версии SSMS, но это должно быть похоже)

щелкните правой кнопкой мыши базу данных, выберите задачи, выберите генерацию сценариев.Затем выберите нужную таблицу, перейдите далее, затем в дополнительных настройках найдите «типы данных для сценария» и измените их на данные.Это должно сгенерировать скрипт для загрузки всех данных из вашей таблицы - вам нужно будет отредактировать его, чтобы просто загрузить нужные вам строки.

Другой вариант - написать скрипт, который в основном создает нужные вам данные.Вам нужно было бы настроить его для начала и настроить его, если вы когда-либо измените формат таблицы, но вы можете отредактировать скрипт выбора так, чтобы он получал только те данные, которые вы хотите.Я уверен, что вы могли бы написать сценарий, который бы автоматически создавал его для вас, но мне он никогда не был нужен, поэтому я не думал об этом.

Что-то вроде этого

With baseRows as 
(
    --This bit gets the data you want
    Select E.*
        , ROW_NUMBER() over(ORDER BY ID) as RowNo
    From dbo.Email E
    Where E.Language = 'zh'  -- whatever selection you need here
)
, selectRows as
(
    --This bit creates the data select statments to set the data to import
    Select
            case when BR.RowNo = 1 then '' else 'Union All ' end
            + 'Select ' 
            + convert(varchar(10), BR.userID) + ' as userID, '  -- required integer example
            + case when BR.backupID is null then 'NULL' else CONVERT(varchar(10), BR.backupID) end + ' as backupID, '  -- nullable integer example
            + '''' + BR.Name + ''' as name, '  -- required nvarchar example
            + case when BR.groupname IS null then 'NULL' else '''' + BR.groupname + '''' end + ' as groupname, '  --nullable varchar example
            + CONVERT(varchar(2), BR.isActive) + ' as isActive, '  --bit example        
        as SQL
    from baseRows BR
)

Select  
    --This creates the insert command row (top row) of the final query
  'Insert into Email (
      userID
      , backupID
      , name
      , groupName
      , IsActive
)' as SQL
UNION ALL
Select SQL from baseRows   --and adds the data to the following rows

Если вы запустите этот скрипт, на выходе будет скрипт, который вы ищете для загрузки данных на другой компьютер.

0 голосов
/ 25 июня 2018

Щелкните правой кнопкой мыши на имени базы данных (таблица, в которой находится база данных) ---> Задачи ---> Создать сценарии ---> Далее ---> выбрать конкретные объекты базы данных ---> Выбрать таблицу ---> Сохранить в файл= ADVANCED ---> нажмите Advanced ---> типы данных для сценария = "Только данные" ---> Укажите путь (где хранить команды вставки)

0 голосов
/ 25 июня 2018

Это то, что вы хотите?

insert into colleague.dbo.email ( . . . )
    select . . . 
    from my.dbo.email
    where language = 'zh';
...