Ret*_*der 6 t-sql sql-server sql-server-2000
我有一堆orderIds'1,18,1000,77 ......'我正在从nvarchar(8000)中恢复过来.我试图解析此字符串并将id放入临时表.有一种简单有效的方法吗?
要查看我解析的所有orderId的列表,我应该能够这样做:
select orderid from #temp
试一试.它会将CSV值拆分并加载到表变量中.
declare @string nvarchar(500)
declare @pos int
declare @piece nvarchar(500)
declare @strings table(string nvarchar(512))
SELECT @string = 'ABC,DEF,GHIJK,LMNOPQRS,T,UV,WXY,Z'
if right(rtrim(@string),1) <> ','
SELECT @string = @string + ','
SELECT @pos = patindex('%,%' , @string)
while @pos <> 0
begin
SELECT @piece = left(@string, (@pos-1))
--you now have your string in @piece
insert into @strings(string) values ( cast(@piece as nvarchar(512)))
SELECT @string = stuff(@string, 1, @pos, '')
SELECT @pos = patindex('%,%' , @string)
end
SELECT * FROM @Strings
Run Code Online (Sandbox Code Playgroud)
在CodeBetter上从Raymond找到并修改.
通过数字表创建需要几秒钟的最快方法:
--First build your numbers table via cross joins
select top 8000 ID=IDENTITY(int,1,1)
into numbers
from syscolumns s1
,syscolumns s2
,syscolumns s3
GO
--add PK
alter table numbers add constraint PK_numbers primary key clustered(ID);
GO
create table #temp(
ID int identity(1,1) primary key,
StringValues varchar(8000)
)
declare @orderIds varchar(8000)
set @orderIds = ',1, 18, 1000, 77, 99, 1000, 2, 4,'
insert into #temp(StringValues)
select substring(@orderIds,ID+1,charindex(',',@orderIds,ID+1)-ID-1)
from numbers where ID < len(@orderIds)and substring(@orderIds,ID,1) = ',';
Run Code Online (Sandbox Code Playgroud)
根据以下文章,这是我多年来一直使用的一种很好的方法:http: //www.sqlservercentral.com/articles/T-SQL/62867/
| 归档时间: |
|
| 查看次数: |
21267 次 |
| 最近记录: |