機能 1
Create FUNCTION [dbo].[fn_BraekTextInLines] ( -- Add the parameters for the function here @InString varchar(max), @LineLength int ) RETURNS nvarchar(max) AS BEGIN if @LineLength <=0 or @LineLength> LEN(@InString) return @InString declare @tmp varchar(max) declare @result varchar(max) DECLARE @word varchar (max); declare @addedInResult bit DECLARE c CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY FOR SELECT s FROM SplitMax(@InString,''); OPEN c; FETCH NEXT FROM c INTO @word; --set @tmp [email protected] WHILE @@FETCH_STATUS = 0 BEGIN if LEN(@tmp + ' ' + @word) < @LineLength begin set @tmp = @tmp + ' ' + @word set @addedInResult = 0 end else begin set @result = isnull(@result, ' ') + CHAR(13) + RTRIM(LTRIM( @tmp)) set @tmp = @word set @addedInResult = 1 end FETCH NEXT FROM c INTO @word; if @@FETCH_STATUS <> 0 begin set @result = isnull(@result, ' ') + CHAR(13) + RTRIM(LTRIM( @tmp)) set @addedInResult = 1 end END CLOSE c; DEALLOCATE c; if @addedInResult=0 begin set @result = isnull(@result, ' ') + CHAR(13) + RTRIM(LTRIM( @tmp)) end return @result END
プレ>機能 2
Create FUNCTION [dbo].[fn_WrapString] ( -- Add the parameters for the function here @InString varchar(max), @LineLength int ) RETURNS nvarchar(max) AS BEGIN declare @result varchar(max) declare @tmp varchar(max) DECLARE @Line varchar (max); DECLARE c CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY FOR SELECT s FROM SplitMax(@InString,CHAR(13)); OPEN c; FETCH NEXT FROM c INTO @Line; WHILE @@FETCH_STATUS = 0 BEGIN set @tmp = dbo.fn_BraekTextInLines(@Line,@LineLength) set @result = isnull(@result,' ') + @tmp FETCH NEXT FROM c INTO @Line; END CLOSE c; DEALLOCATE c; return Rtrim(Ltrim(@result)) END
プレ>機能 3
ALTER FUNCTION [dbo].[SplitMax](@String VARCHAR(max), @Delimiter CHAR(1)) RETURNS @temptable TABLE (s VARCHAR(max)) AS BEGIN DECLARE @idx INT DECLARE @slice VARCHAR(max) SELECT @idx = 1 IF len(@String)<1 OR @String IS NULL RETURN while @idx!= 0 BEGIN SET @idx = charindex(@Delimiter,@String) IF @idx!=0 SET @slice = LEFT(@String,@idx - 1) ELSE SET @slice = @String IF(len(@slice)>0) INSERT INTO @temptable(s) VALUES(@slice) SET @String = RIGHT(@String,len(@String) - @idx) IF len(@String) = 0 break END RETURN END
プレ>関数 fn_WrapString を呼び出してテキストをラップする
declare @name varchar(max) set @name = 'Ine was King of Wessex from 688 to 726. He was'+ CHAR(13) +'unable to retain the territorial gains of his predecessor, Cædwalla, who had brought much of southern England under his' print dbo.fn_WrapString(@name,60)
プレ>出力:
Ine was King of Wessex from 688 to 726. He was unable to retain the territorial gains of his predecessor, Cædwalla, who had brought much of southern England under his
プレ>