下面的查询用于创建一个包含服务器名称列表的文本文件。
我遇到的问题是文本文件的创建方式如下
Server, Server, Server etc.
但我需要它如下
Server
Server
Server
查询:
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
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
}
该答案假设多个逗号位于该列的一行中
ServerName
,并且需要删除这些逗号并添加换行符+回车符而不是每个逗号。可能有更好的方法来获得最终结果,但要写入不带逗号的文本文件,您可以使用该
REPLACE()
函数。CHARINDEX()
只会给你找到的第一个值的位置。测试
结果
如果您不想换行,请更改
SELECT REPLACE(ServerName,',',+ ' '+char(13)+char(10) )
为 。SELECT REPLACE(ServerName,',',+ ' ' )