我的问题是我需要使用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"
谢谢!
答案 0 :(得分:0)
我承认我对使用SQL的PowerShell互操作没有任何经验,所以这大多只是一个有根据的猜测,但是有意义的是$ 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参数,您就依赖于DataTable的ToString,将其神奇地转换为T-SQL代码。
这里的另一个选择是,如果你想进行跨服务器查询,我相信某些版本的SQL Server支持。