0
我有一個稱爲拆分的表值函數。該函數需要2個字符串。它會根據第二個字符串的值將第一個字符串拆分爲多行。一個拆分函數來提取字符串「去」
我想要在'go'語句中分割sql的函數。問題是,當它在sql中的任何位置找到字符串「go」時,它將會拆分sql字符串。我需要它在字符串'go'上分開,只有當它自己在一行時。有任何想法嗎?我希望不必重寫函數,而是以某種(希望簡單的)方式修改它。
IF EXISTS (SELECT * FROM sys.objects WHERE
type = 'TF' AND name = 'Split')
BEGIN
DROP FUNCTION [dbo].[Split]
END
GO
CREATE FUNCTION dbo.Split
(
@RowData nvarchar(MAX),
@SplitOn nvarchar(50)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Data nvarchar(MAX)
)
AS
BEGIN
Declare @Cnt int
DECLARE @tst varchar(MAX)
Set @Cnt = 1
While (Charindex(@SplitOn,@RowData)>0)
Begin
Select
@tst = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)));
Insert Into @RtnValue (data)
Select
Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+2,len(@RowData))
Set @Cnt = @Cnt + 1
End
Insert Into @RtnValue (data)
Select Data = ltrim(rtrim(@RowData))
Return
END
GO
-- test out the function
SELECT data
FROM dbo.Split('
begin transaction;
go
alter table activity_log add
hcm_got_estimate_num char(16) default (NULL);
go
set ANSI_NULLS on;
go
commit;
go'
, 'go');
你需要拆就'去'。我不確定數據是如何表示的,但它通常涉及ASCII字符10和13的組合(回車和換行符)。 –
「當它自己在一條線上」?它的前後不會有空間**嗎?它本身不會有長度嗎? – bonCodigo