我正在编写一个脚本,可以帮助从列中提取一些数据到文本文件中。它将多个列连接成单个列。
我遇到的问题是,当我使用powershell Invoke-SqlCmd时,结果会缩短,结果会像这样被截断
Some example text thats fine
This text is too long so it will be cu...
This is also fine我尝试添加-MaxCharLength参数,但没有帮助。
只是为了确认一下,SSMS中的结果在生成的列的完整长度下显示得很好。
我检查了有问题的列的长度,它有226个字符。有什么解决方法吗?
编辑:当我输出文件时也会发生同样的事情,即使有额外的-Width,但有趣的是当我输出Csv时它不会发生。
Invoke-Sqlcmd $CreateScripts -ServerInstance $serverInstace -Database $dbName | Export-Csv C:\Users\glueTorndao\Desktop\test.csv如果有人想复制SQL命令如下:
SELECT
'IF EXISTS (SELECT * FROM sys.database_principals WHERE name = ''' + USR.name + ''') BEGIN '
+
CASE
WHEN DBP.state <> 'W'
THEN DBP.state_desc
ELSE 'GRANT'
END
+ SPACE(1) + DBP.permission_name + SPACE(1) + 'ON ' + QUOTENAME(USER_NAME(OBJ.schema_id)) + '.' + QUOTENAME(OBJ.name)
+ CASE
WHEN CL.column_id IS NULL
THEN SPACE(0)
ELSE '(' + QUOTENAME(CL.name) + ')'
END
+ SPACE(1) + 'TO' + SPACE(1) + QUOTENAME(USR.name) COLLATE database_default
+ CASE WHEN DBP.state <> 'W' THEN SPACE(0) ELSE SPACE(1) + 'WITH GRANT OPTION' END + ' END ;' as '--ObjectGrants'
FROM sys.database_permissions AS DBP
INNER JOIN sys.objects AS OBJ ON DBP.major_id = OBJ.[object_id]
INNER JOIN sys.database_principals AS USR ON DBP.grantee_principal_id = USR.principal_id
LEFT JOIN sys.columns AS CL ON CL.column_id = DBP.minor_id AND CL.[object_id] = DBP.major_id
ORDER BY DBP.permission_name ASC, DBP.state_desc ASC并且问题是由单个存储过程引起的,该存储过程的名称为95个字符,并且一个用户对该过程具有执行权限。
Powershell命令现在如下所示:
Invoke-Sqlcmd $createScript -ServerInstance $serverInstace -Database $dbName -MaxCharLength 10000 | Format-Table | Out-File C:\Users\GlueTornado\Desktop\test5.txt -Width 10000发布于 2021-11-08 17:19:59
默认输出格式在每个结果中只使用一行文本,并且只填充控制台的宽度,不会超过控制台的宽度(没有水平滚动),因此空间是有限的。另一方面,列表格式的输出将在必要时将文本换行为多行。
尝试通过管道将输出转换为format-list,例如:
Invoke-SqlCmd "SELECT Description FROM MyTable" | Format-Listhttps://stackoverflow.com/questions/69886655
复制相似问题