gpt4 book ai didi

sql - 超过8000个字符时如何使用print语句

转载 作者:行者123 更新时间:2023-12-04 21:37:01 31 4
gpt4 key购买 nike

我有一个程序,代码如下所示:

ALTER PROCEDURE [dbo].[usp_Gen_Proc] 
(@ID INT )
AS
Begin

IF OBJECT_ID('tempdb..#procedure') IS NOT NULL
DROP TABLE #procedure

DECLARE @Name VARCHAR(100)
DECLARE @SQL VARCHAR(MAX)
DECLARE @Script VARCHAR(MAX),
@DB VARCHAR(100),
@Schema VARCHAR(100),
@Proc_Name VARCHAR(max),
@BR CHAR(2)

SET @BR = CHAR(10)+ CHAR(13)

SET NOCOUNT ON

SELECT @Name= [Procedure_Name] FROM dbo.datsource
WHERE [ID] = @ID

SELECT @Proc_Name = PARSENAME(@Name, 1) ,
@Schema = PARSENAME(@Name, 2) ,
@DB = PARSENAME(@Name, 3)


CREATE TABLE #procedure ( script VARCHAR(MAX) )

EXEC('INSERT INTO #procedure(script)
SELECT definition FROM '+@DB+'.sys.all_sql_modules sq
WHERE sq.object_id = (SELECT object_id FROM '+@DB+'.sys.objects
WHERE type = ''P'' AND name = '''+@Proc_Name+''' ) ')


SET @Script = ' Use ' +@BR +@DB + @BR+ ' Go' +@BR

SELECT @Script = @Script+script
FROM #procedure


DECLARE @pos INT =7500

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

PRINT SUBSTRING(@Script,1,@Pos)

DECLARE @Counter INT
SET @Counter = 0
DECLARE @TotalPrints INT
SET @TotalPrints = ( LEN(@script) / 8000 )
WHILE @Counter < @TotalPrints
BEGIN

SET @Counter = @Counter + 1

PRINT SUBSTRING(@script,@pos+1,7500)
SET @pos = @pos+7500

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

END
END

基本上程序在做什么只是打印程序代码。但我面临的问题是当我打印它时,我丢失了中间的一些字符。

谁能让我知道我哪里出错了?

最佳答案

为什么要打印?

为什么不使用脚本进行选择,如果您想查看所有内容,请将其放入 xml 中。

Select Convert(xml, @script)

编辑 :

你之间不需要做+1
PRINT SUBSTRING(@script,@pos,7500)

关于sql - 超过8000个字符时如何使用print语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934532/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com