2
我想從一列中取數據字符串,並將其分割成SQL Ser 2008中的幾個不同的列。示例:名稱帳戶445566 0010020056893010445478008 AFD 369.我正在使用借用空間劃分功能,這非常有效。問題是我是T-SQL的新手,並且有幾個問題。SQL Server 2008的T-SQL的UDF的幾何和目的
我該如何讓函數在整個表中運行,而不僅僅是一個字符串文字?
這生成一個temparary表你如何把這些值並插入到我的表中?它只是一個插入語句?
這是劇本和用法:
CREATE FUNCTION [dbo].[Split]
(
@String varchar(max)
,@Delimiter char
)
RETURNS @Results table
(
Ordinal int
,StringValue varchar(max)
)
as
begin
set @String = isnull(@String,'')
set @Delimiter = isnull(@Delimiter,'')
declare
@TempString varchar(max) = @String
,@Ordinal int = 0
,@CharIndex int = 0
set @CharIndex = charindex(@Delimiter, @TempString)
while @CharIndex != 0 begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,substring(@TempString, 0, @CharIndex)
)
set @TempString = substring(@TempString, @CharIndex + 1, len(@TempString) - @CharIndex)
set @CharIndex = charindex(@Delimiter, @TempString)
end
if @TempString != '' begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,@TempString
)
end
return
end
--USAGE
select
s.*
from dbo.Split('Name Account 445566 0010020056893010445478008 AFD 369', ' ') as s
where rtrim(s.StringValue) != ''
GO
不錯!我會試一試。我想我可能會在那裏堆棧一秒鐘。感謝您的幫助! – 2boolORNOT2bool 2011-05-10 19:55:00
看起來不錯,但有一個錯誤。爲過程或函數dbo.Split提供的參數數量不足。 – 2boolORNOT2bool 2011-05-10 20:01:30
啊,是的,對不起。只需要添加分隔符作爲第二個參數 – gbn 2011-05-10 20:02:59