Форум программистов, компьютерный форум, киберфорум
Наши страницы

PowerShell

Войти
Регистрация
Восстановить пароль
 
NAWARRO
7 / 7 / 1
Регистрация: 07.09.2013
Сообщений: 44
#1

Перенос данных из одной таблицы БД SQL в другую - PowerShell

23.07.2015, 11:43. Просмотров 569. Ответов 5
Метки нет (Все метки)

Добрый день, всем единомышленникам, по изучению PowerShell!))
Не так давно, стал присматриваться к PS, практической с точки зрения. Интересует его гибкость и мощь, при работе с БД SQL. Хотелось бы расширить, знания по применению PS, не только в простейших конструкциях с применением командлета: invoke-sqlcmd –query
Рассмотрел примерчик, вида:
# Сравниваем логины
#Командлет выводит логины, которые есть на обоих серверах

PowerShell
1
Сompare-object -referenceobject $($smoserver1.logins) -differenceobject $($smoserver2.logins) -includeequal | where-object {$_.SideIndicator -eq "=="} |select-object InputObject
Не понятно только, где в этом примере указаны базы на серверах $smoserver1 и $smoserver2
* * *
Возможно кто-то поможет готовым скриптом:
Есть две базы и две таблицы $smoserver1.dbo.Table1 $smoserver2.dbo.Table2. Задачка:
Как перенести из $smoserver1.dbo.Table1 в $smoserver2.dbo.Table2, только те столбцы, которые есть в dbo.Table2..?
Как дописывать в $smoserver2.dbo.Table2, только те записи, которых нет в dbo.Table2, но есть (!) в $smoserver1.dbo.Table1..? (т.е. «умная» синхронизация). Уникальность по столбцу ID.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2015, 11:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перенос данных из одной таблицы БД SQL в другую (PowerShell):

Поиск пользователя в AD по ID, копирование его данных и перенос их в другую базу пользователей AD - PowerShell
нужен скрипт который: 1. ищет пользавателя в AD по id 2. копирует его данные 3. переносит в другую базу пользователей AD

Перенос данных из одной таблицы в другую - MS Excel
Добрый день, Возник такой вопрос, возможно сделать следующие в экселе или нет? вопрос таков - есть две базы данных, но наименование...

Перенос данных из одной таблицы в другую - MS Excel
Доброго времени суток, товарищи, очень нужна ваша помощь. Мне необходимо перенести большой объем данных из таблицы 2 в таблицу 1, проблема...

Перенос данных из одной таблицы в другую - Delphi БД
У меня проблема. Вношу данные в одну таблицу, потом по нажатию кнопки, эти записи должны сравниваться с другими записями из другой таблицы,...

Перенос данных с одной таблицы в другую - Oracle
Здравствуйте, помогите пожалуйста составить запрос. Нужно перенести из данные таблицы1 в таблицу2, так, чтобы не потерять информацию в...

Перенос данных из одной таблицы в другую - Delphi БД
Привет всем, имеется для таблицы, одна - эксель. Подключается через ADOConnection1, вторая DBF, подключается через ADOConnection2. ...

5
Garry Galler
1236 / 979 / 297
Регистрация: 28.10.2013
Сообщений: 2,448
23.07.2015, 23:39 #2
Не понятно только, где в этом примере указаны базы на серверах $smoserver1 и $smoserver2
А в полном примере разве не указано?
Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#1. Загружаем SMO
 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo ") / Out-Null
 
#2. Подключаемся к серверу 1 (Windows аутентификация):
#Сервер1-локальный
#Если нужен другой сервер, введите вместо точки IP-адрес \ имя сервера
 
$smoserver1 =new-object("Microsoft.SqlServer.Management.Smo.Server") "."
 
#3. Подключаемся к Серверу 2 (аутентификация SQL Server):
#В следующей строке нужно вписать IP-адрес сервера 2 либо имя сервера
 
$smoserver2 =new-object("Microsoft.SqlServer.Management.Smo.Server") "IP - адрес \ имя сервера2"
 
#Если аутентификация SQL Server, то значение FALSE, если Windows(по умолчанию) - TRUE
 
$smoServer2.ConnectionContext.set_LoginSecure($FALSE)
 
#Запрос ввода имени пользователя и пароля
 
$LoginCredentials = Get-Credential
 
#Устанавливаем свойства ConnectionContext
 
$smoServer2.ConnectionContext.set_EncryptConnection($FALSE)
 
#В конце поста я расскажу зачем в строке ниже убираем слеш из имени пользователя
 
$smoServer2.ConnectionContext.set_Login($LoginCredentials.UserName -replace(""))
$smoServer2.ConnectionContext.set_SecurePassword($LoginCredentials.Password)
 
#4. Сравниваем логины
#Командлет выводит логины, которые есть на обоих серверах
 
compare-object -referenceobject $($smoserver1.logins) -differenceobject $($smoserver2.logins) -includeequal / where-object {$_.SideIndicator -eq "=="} /select-object InputObject
1
idm
119 / 33 / 10
Регистрация: 19.03.2015
Сообщений: 90
24.07.2015, 08:18 #3
Используйте sqlcmd через powershell и пишите сценарии обработки задач любого масштаба с внутренней логикой.
1
NAWARRO
7 / 7 / 1
Регистрация: 07.09.2013
Сообщений: 44
24.07.2015, 09:59  [ТС] #4
Нет не указано... Но, не суть важно - я уже разобрался. Вот, что уменя получилось:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlEnum") | Out-Null
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") | Out-Null
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
$smoserver1 =new-object("Microsoft.SqlServer.Management.Smo.Server") "ATM\ACRONIS"
$smoServer1.ConnectionContext.set_LoginSecure($TRUE)
Write-Host Your connection string contains these values:
Write-Host
Write-Host $smoServer1.ConnectionContext.ConnectionString.Split(";")
Write-Host
$File ="c:\temp\SqlLoopLog.txt"
$dQuery = "SELECT top 10 Name FROM Param where Name like 'CA%'"
$sQuery= "INSERT INTO TechParam (Name) VALUES ('Name')" 
$proc = Invoke-Sqlcmd  -ServerInstance $smoserver1 -Database "master" -Query $dQuery 
$proc | Foreach {$proc  
 Invoke-Command -script {Invoke-Sqlcmd  -ServerInstance $smoserver1 -Database "master" -Query "INSERT INTO TechParam (Name) VALUES ('$proc')"}
 }
не могу понять, как в конвейере передать в переменную VALUES ('$proc') для инсерта, то что выбирается при первом запросе: $dQuery = "SELECT top 10 Name FROM Param where Name like 'CA%'

Добавлено через 3 минуты
Цитата Сообщение от idm Посмотреть сообщение
Используйте sqlcmd через powershell и пишите сценарии обработки задач любого масштаба с внутренней логикой.
Оно-то так, только хотелось бы примерчик рабочий, потому как в инете не так много русскоязычных ресурсов, по PS - а для работы с базами, так еще меньше. В основном, приходится учиться по http://stackoverflow.com
0
idm
119 / 33 / 10
Регистрация: 19.03.2015
Сообщений: 90
24.07.2015, 11:45 #5
Код
sqlcmd -S11.111.11.1 -Uuser -Ppassword -Q "SELECT * FROM base.dbo.table" -o C:\КакаяТоПапке\ИмяФайлика.CSV -s;
Например вот эта строчка конектится на 11.111.11.1 под юзером user с паролем password и после флага -Q в "" Вы пишите запрос на T-SQL в результате мы одной строкой выгружаем данные с таблицы в бдшке в csv файлик. Я например использую это в циклах для формирования отчетов. Вам ничто не мешает вводить всё разнообразие запросов в -Q "Мой запрос". Я предпочитаю такой способ работы чем студия, потому как мы можем воткнуть шеловские переменные будь то стринг или инт без напрягов присущих sql

Добавлено через 33 минуты
NAWARRO,
Вот рабочий и простой пример:
Код
sqlcmd -S "11.111.1.11" -Uuser -Ppassword -Q "SELECT * FROM test.dbo.table" -o C:\1\test.txt
Создайте папочку 1 на диске С, подставьте свой ip, учетку, пароль, название базы и таблицы и выгрузите содержимое этой таблицы в файлик.
Довольно удобно.
1
NAWARRO
7 / 7 / 1
Регистрация: 07.09.2013
Сообщений: 44
24.07.2015, 13:16  [ТС] #6
Код
INSERT INTO TechParam (Name) VALUES ('1300')
Почти все получилось, вопрос только в одном:
как в VALUES ('1300') вместо '1300' передать значение переменной, полученной из предыдущего запроса?
PowerShell
1
2
$proc = Invoke-Sqlcmd  -ServerInstance $smoserver1 -Database "master" -Query $dQuery 
$proc | Foreach {$proc
в переменную $proc передается весь поток, как мне из него вычленитьтолько значения?
PowerShell
INSERT INTO TechParam (Name) VALUES ('$proc')
- в таком виде не работает
0
24.07.2015, 13:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2015, 13:16
Привет! Вот еще темы с ответами:

Перенос данных из одной таблицы в другую - VBA
Всем добрый день! Подскажите, как осуществить перенос данных из одного файла в другой в зависимости от названия? Есть два файла с...

Перенос данных из одной таблицы в другую - MS Access
Добрый день! у меня есть несколько таблиц с идентичными полями (за пример возьму две). таблица "А"- это моя основная. таблица "Б" ко мне...

Перенос данных из одной таблицы в другую - MS Access
Есть две таблицы "Товары" и "Процессы". В товарах-список алкогольной продукции и её характеристики, в процессах- процессы, связанные с этой...

Перенос данных из одной таблицы в другую - VBA
Здравствуйте! Помогите пожалуйста. Задача состоит в следующем: есть 3 xl книги (ИТОГ, май ОО и ОТС), нужно перенести данные (столбцы :...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru