sql-server - 自动在 Powershell 上运行 SQL 查询
问题描述
我正在使用以下查询为多个 SQL Server 使用 powershell 脚本自动执行数据库计数、数据库名称、数据库创建日期:
#load the assembly
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")
#read server names from a file
$servers = get-content "D:\dbcount\servers.txt"
$servers | $db = $server.Databases["master"]
$db.ExecuteWithResults("SELECT COUNT(*) OVER (PARTITION BY 1) AS db_count ,
name AS db_name , create_date AS db_creation_date FROM sys.databases WHERE
[name] NOT IN ('master', 'tempdb', 'model', 'msdb')")
但是这个查询给出了以下错误:
表达式只允许作为管道的第一个元素。
任何人都可以在这方面帮助我解决错误..
解决方案
罪魁祸首是这样的说法:
$servers | $db = $server.Databases["master"]
这里发生的事情是将$servers
集合(字符串数组)通过管道传递给赋值语句$db = $server.Databases["master"]
- 这对 Powershell 的解析规则没有任何意义,因此会出现错误。
我冒昧地猜测您正在尝试遍历$servers
类似的内容,
$servers | % {
$server = New-Object Microsoft.SqlServer.Management.Smo.Server
$server.ConnectionContext.ConnectionString = "data source = $_,..."
$db = $server.Databases["master"]
...
}
更重要的是,TSQL 查询似乎也很奇特,除了数据库名称和创建日期之外,每行上重复的数据库 id 计数。
推荐阅读
- java - ORA - 01400:无法插入到具有复合键的空(一对多双向)JPA
- django - 如何向用户显示他的愿望清单是空的?
- amazon-web-services - 登录 AWS Workmail 时出现访问错误
- php - 在html源码中使用PHP更改链接地址
- json - 用 JQ 中另一个文件中的对象替换嵌套对象
- git - 向已提交的提交添加电子邮件
- android - 在 GridviewItemClickListener 上想要更改 GridView 项的颜色
- c++ - 使用低 Alpha 值时的 Alpha 混合问题
- apache - Apache 将 example.com 重定向到 ec2 公共 DNS
- html - 缩小和清除 HTML/CSS/JSS