#mysql #sql #powershell
#mysql #sql #powershell
Вопрос:
Моя проблема в том, что мне нужно использовать сценарий powershell для подключения к базе данных и запроса некоторых результатов и немедленно подключиться к другой базе данных и вставить в другую базу данных. Мой пример кода выглядит следующим образом, и, похоже, он не работает
$rs1 = SQLCMD -W -h-1 -S $server1 -d $database1 -Q "SET NOCOUNT ON; select ErrorLogId, CreatedDtim from dbo.ErrorLog where order by CreatedDTim DESC;"
SQLCMD -W -h-1 -S $server2 -d $database2 -Q "Insert into dbo.ErrorLog $rs1"
Спасибо!
Ответ №1:
Я признаю, что у меня нулевой опыт взаимодействия PowerShell с SQL, так что в основном это просто обоснованное предположение, но имеет ли смысл, что $ rs1 имеет некоторый тип DataTable, который не отображается как параметр T-SQL и не печатается в синтаксисе T-SQL?
Если бы я делал что-то подобное на C #, как я обычно делаю, мне пришлось бы разобрать $ rs1 и перебирать каждую строку. Другими словами, мне нужно что-то похожее на следующий псевдо-псевдокод:
var datatable = getTable("select ErrorLogId, CreatedDtim from dbo.ErrorLog where order by CreatedDTim DESC");
bool first = true;
StringBuilder builder = new StringBuilder("INSERT INTO dbo.ErrorLog VALUES ");
foreach(var row in datatable.Rows)
{
if(first)
first = false;
else
builder.append(", ");
builder.append("(" row["ErrorLogId"] ", " row["CreatedDtim"] ")");
}
executeNonQuery(builder.ToString());
Очевидно, что многое из этого является плохой практикой, и это не очень чисто, но вы поняли суть. Просто вставляя параметр datatable, вы полагаетесь на toString DataTable, волшебным образом превращая его в код T-SQL.
Другой вариант здесь, если вы хотите выполнять межсерверные запросы, я полагаю, что это поддерживается некоторыми версиями SQL Server.