Форум программистов, компьютерный форум, киберфорум
Наши страницы
PowerShell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
NAWARRO
7 / 7 / 1
Регистрация: 07.09.2013
Сообщений: 44
1

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

23.07.2015, 11:43. Просмотров 601. Ответов 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
Ответы с готовыми решениями:

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

Перенос данных с одной таблицы в другую
Добрый день. Подскажите. Есть 1 таблица и в ней табельные номера. Есть 2...

Перенос данных из одной таблицы в другую
Добрый день! Я столкнулась с проблемой обработки данных, выгруженных в Excel из...

Перенос данных из одной таблицы в другую
помогите пожалуйста, нужно перенести данные из одной таблицы в другую при...

Перенос данных из одной таблицы в другую
Здравствуйте! Помогите пожалуйста. Задача состоит в следующем: есть 3 xl книги...

5
Garry Galler
1585 / 1262 / 475
Регистрация: 28.10.2013
Сообщений: 3,233
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 / 19
Регистрация: 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 / 19
Регистрация: 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

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

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

Перенос данных с одной таблицы в другую
Здравствуйте, форумчане. Вопрос такой. Как правильно написать макрос для...


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

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

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