【发布时间】:2018-08-23 09:32:56
【问题描述】:
为什么 SQLCMD 的存储输出只有Length 属性而不是column names?。不能用其属性存储sqlcmd 输出吗?
Invoke-sqlcmd 正确存储它,但Invoke-SQLcmd 需要更长的时间来处理,所以我试图让它与 SQLcmd 一起工作,因为这个方法将是计划每分钟运行一次的不同脚本的一部分,每小时一次等等,
知道这是否可行或问题是什么?
存储输出并回显 $var:
PS C:> $var=(SQLCMD -S 'x.x.x.x' -U 'user' -P 'password' -i "C:\query.sql" -W -m 1)
PS C:> $var
job_id name
------ ----
12345-aaaa-1234-5678-000000000000000 Clear DB entries
12345-bbbb-1234-5678-000000000000000 TempLog DB
Echo $var[0,1,2] 不显示属性名称。
PS C:> $var[0]
job_id name
PS C:> $var[1]
------ ----
PS C:> $var[2]
12345-aaaa-1234-5678-000000000000000 Clear DB entries
显示 $var 属性
PS C:> $var | select *
Length
------
11
53
显示 $var 类型
PS C:> $var.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
【问题讨论】:
-
我从未使用过 SQLCMD,但根据您显示的内容,它会返回一个字符串数组。不是行对象。 $var[0] 应该告诉您属性名称,然后您可以根据需要解析其余行以创建自己的自定义对象。
-
您应该将您的 SQL 查询代码 (C:\query.sql) 添加到此帖子中,以便我们可以看到您要完成的工作。
-
代码无关紧要,但它是
select job_id, name from table; -
@EBGreen 你能告诉我如何解析它的其余部分来创建自定义对象吗?我正在研究。如果我们可以流式传输到
sqlcmd输出,单行将很酷。 -
不,使用 cmdlet 来获取实际的行对象会很酷。如何解析它在很大程度上取决于数据的样子。如果 SQLCMD 让您指定分隔符,那么我想我会首先尝试使用逗号作为分隔符,然后将其视为 CSV 并使用 Import-CSV 来获取对象数组。如果您的数据中断,那么您将不得不自己解析每一行。无论如何,您需要尝试自己编写代码,然后针对您编写的代码遇到的具体问题提出具体问题。
标签: powershell sqlcmd invoke-sqlcmd