首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Invoke-SqlCmd缩短结果

Invoke-SqlCmd缩短结果
EN

Stack Overflow用户
提问于 2021-11-08 16:17:51
回答 1查看 93关注 0票数 0

我正在编写一个脚本,可以帮助从列中提取一些数据到文本文件中。它将多个列连接成单个列。

我遇到的问题是,当我使用powershell Invoke-SqlCmd时,结果会缩短,结果会像这样被截断

代码语言:javascript
复制
Some example text thats fine
This text is too long so it will be cu...
This is also fine

我尝试添加-MaxCharLength参数,但没有帮助。

只是为了确认一下,SSMS中的结果在生成的列的完整长度下显示得很好。

我检查了有问题的列的长度,它有226个字符。有什么解决方法吗?

编辑:当我输出文件时也会发生同样的事情,即使有额外的-Width,但有趣的是当我输出Csv时它不会发生。

代码语言:javascript
复制
Invoke-Sqlcmd $CreateScripts -ServerInstance $serverInstace -Database $dbName | Export-Csv C:\Users\glueTorndao\Desktop\test.csv

如果有人想复制SQL命令如下:

代码语言:javascript
复制
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命令现在如下所示:

代码语言:javascript
复制
Invoke-Sqlcmd $createScript -ServerInstance $serverInstace -Database $dbName -MaxCharLength 10000 | Format-Table | Out-File C:\Users\GlueTornado\Desktop\test5.txt -Width 10000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-08 17:19:59

默认输出格式在每个结果中只使用一行文本,并且只填充控制台的宽度,不会超过控制台的宽度(没有水平滚动),因此空间是有限的。另一方面,列表格式的输出将在必要时将文本换行为多行。

尝试通过管道将输出转换为format-list,例如:

代码语言:javascript
复制
Invoke-SqlCmd "SELECT Description FROM MyTable" | Format-List
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69886655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档