如何使用打印语句打印 VARCHAR(MAX)?

新手上路,请多包涵

我有一个代码是:

 DECLARE @Script VARCHAR(MAX)

SELECT @Script = definition FROM manged.sys.all_sql_modules sq
where sq.object_id = (SELECT object_id from managed.sys.objects
Where type = 'P' and Name = 'usp_gen_data')

Declare @Pos int

SELECT  @pos=CHARINDEX(CHAR(13)+CHAR(10),@script,7500)

PRINT SUBSTRING(@Script,1,@Pos)

PRINT SUBSTRING(@script,@pos,8000)

脚本的长度约为 10,000 个字符,并且由于我使用的打印语句最多只能容纳 8000 个字符。所以我使用了两个打印语句。

问题是当我有一个 18000 个字符的脚本时,我曾经使用 3 个打印语句。

那么有没有办法可以根据脚本的长度设置打印语句的数量?

原文由 peter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 695
2 个回答

您可以根据脚本长度除以 8000 的计数执行 WHILE 循环。

例如:

 DECLARE @Counter INT
SET @Counter = 0
DECLARE @TotalPrints INT
SET @TotalPrints = (LEN(@script) / 8000) + 1
WHILE @Counter < @TotalPrints
BEGIN
    -- Do your printing...
    SET @Counter = @Counter + 1
END

原文由 Kelsey 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果有人感兴趣,我最终会用 powershell 生成一个文本文件,执行标量代码:

 $dbconn = "Data Source=sqlserver;" + "Initial Catalog=DatabaseName;" + "User Id=sa;Password=pass;"
$conn = New-Object System.Data.SqlClient.SqlConnection($dbconn)
$conn.Open()

$cmd = New-Object System.Data.SqlClient.SqlCommand("
set nocount on

DECLARE @sql nvarchar(max) = ''

SELECT
    @sql += CHAR(13) + CHAR(10) + md.definition + CHAR(13) + CHAR(10) + 'GO'
FROM sys.objects AS obj
join sys.sql_modules AS md on md.object_id = obj.object_id
join sys.schemas AS sch on sch.schema_id = obj.schema_id
where obj.type = 'TR'

select @sql
", $conn)
$data = [string]$cmd.ExecuteScalar()

$conn.Close()

$data | Out-File -FilePath "C:\Users\Alexandru\Desktop\bigstring.txt"

该脚本用于从数据库中获取包含所有触发器的大字符串。

原文由 Alexandru-Codrin Panaite 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进