我正在撰寫一個腳本,該腳本有助于將列中的一些資料提取到文本檔案中。它將幾列連接成一列。
我遇到的問題是,當我使用 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 個字符。有什么解決方法嗎?
編輯:當我做 Out-File 時也會發生同樣的事情,即使有額外的 -Width,但有趣的是,當我做 Export-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
uj5u.com熱心網友回復:
默認輸出格式每個結果只會使用一行文本,并且只會填充控制臺的寬度,不再填充(沒有水平滾動),因此空間是有限的。另一方面,如果需要,串列格式的輸出會將文本包裝成多行。
嘗試將輸出傳送到格式串列,例如:
Invoke-SqlCmd "SELECT Description FROM MyTable" | Format-List
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/353310.html
標籤:sql-server 电源外壳 查询语句
下一篇:SSIS如何在IN子句中使用引數
