Vor*_*ter 1 sql-server-2008 sql-server powershell sql-server-2008-r2 sql-server-2012
下面的查询用于创建一个带有服务器名称列表的文本文件。
我遇到的问题是文本文件的创建就像
Server, Server, Server etc.
Run Code Online (Sandbox Code Playgroud)
但我需要它如下
Server
Server
Server
Run Code Online (Sandbox Code Playgroud)
查询:
BEGIN
CREATE TABLE [TempPSWmiObjectQuery]
(QueryText nvarchar(max))
END
INSERT INTO [TempPSWmiObjectQuery]
SELECT STUFF((SELECT char(13)+char(10),
SUBSTRING(ServerName, 1,
CASE WHEN CHARINDEX(',', ServerName) > 0
THEN CHARINDEX(',', ServerName)-1
ELSE LEN(ServerName)
END)
FROM MasterList
FOR XML PATH('')), 1, 1, '')
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE
EXEC xp_cmdshell 'bcp SQLEnv.dbo.TempPSWmiObjectQuery out "\\ServerName\Data\temp\testlist.txt" -c -T -S "ServerName\Instance"'
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE
DROP TABLE TempPSWmiObjectQuery
Run Code Online (Sandbox Code Playgroud)
PowerShell 脚本:
$StagingServer = "ServerName\InstanceName"
$StagingServerDatabase = "SQLEnv"
foreach($line in
[System.IO.File]::ReadLines("\\ServerName\Data\temp\testlist.txt"))
{
$line
Get-WmiObject win32_Service -Computer $line | where {$_.DisplayName
-match "SQL Server"} | select SystemName, DisplayName, Name, State,
Status, StartMode, StartName | ConvertTo-DbaDataTable | Write-
DbaDataTable -SqlInstance $StagingServer -Database
$StagingServerDatabase -Table _SQLServicesInfo -AutoCreateTable -Confirm
}
Run Code Online (Sandbox Code Playgroud)
此答案假设ServerName列的单行中有多个逗号,并且需要删除这些逗号并添加换行符 + 回车符而不是每个逗号。
可能有更好的方法来获得最终结果,但是要写入没有逗号的文本文件,您可以使用该REPLACE()函数。
CHARINDEX() 只会给你找到的第一个值的位置。
CREATE TABLE [TempPSWmiObjectQuery](QueryText nvarchar(max));
INSERT INTO [TempPSWmiObjectQuery]
SELECT REPLACE(ServerName,',',+ ' '+char(13)+char(10) ) -- Replace comma with space, line feed and carriage return.
FROM MasterList;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
EXEC xp_cmdshell 'bcp SQLEnv.dbo.TempPSWmiObjectQuery out "\\ServerName\Data\temp\testlist.txt" -c -T -S "ServerName\Instance"';
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
DROP TABLE TempPSWmiObjectQuery;
Run Code Online (Sandbox Code Playgroud)
测试
INSERT INTO MasterList(ServerName)
VALUES('Server1,Server2,Server3')
Run Code Online (Sandbox Code Playgroud)
如果您不想要换行,请更改SELECT REPLACE(ServerName,',',+ ' '+char(13)+char(10) )为
SELECT REPLACE(ServerName,',',+ ' ' )。
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |