--借助臨時表
Create Table A
(AA1 Char(3),
AA2 Nvarchar(10),
AA3 Int)
Insert A Select '010', N'北京', 5
Union All Select '021', N'上海', 3
Union All Select '022', N'天津', 4
Union All Select '023', N'重庆', 2
GO
Select TOP 1000 ID=Identity(Int,1,1) Into # From syscolumns,SysObjectsSelect A.AA1,A.AA2 From A
Inner Join # B
On A.AA3>=B.IDGO
Drop Table A,#
--Result
/*
AA1 AA2
010 北京
010 北京
010 北京
010 北京
010 北京
021 上海
021 上海
021 上海
022 天津
022 天津
022 天津
022 天津
023 重庆
023 重庆
*/
Create Table A
(AA1 Char(3),
AA2 Nvarchar(10),
AA3 Int)
Insert A Select '010', N'北京', 5
Union All Select '021', N'上海', 3
Union All Select '022', N'天津', 4
Union All Select '023', N'重庆', 2
GO
Select TOP 1000 ID=Identity(Int,1,1) Into # From syscolumns,SysObjectsSelect A.AA1,A.AA2 From A
Inner Join # B
On A.AA3>=B.IDGO
Drop Table A,#
--Result
/*
AA1 AA2
010 北京
010 北京
010 北京
010 北京
010 北京
021 上海
021 上海
021 上海
022 天津
022 天津
022 天津
022 天津
023 重庆
023 重庆
*/
中没有 TOP 1000 时,查询非常慢,
若是A表的数据量很大,或者说突破1000又改如何?谢谢
Select ID=Identity(Int,1,1) Into # From syscolumns,SysObjects
這個的數據量就會非常大,當然會很慢。
DECLARE @A Table
(AA1 Char(3),
AA2 Nvarchar(10),
AA3 Int)
Insert @A Select '010', N'北京', 5
Union All Select '021', N'上海', 3
Union All Select '022', N'天津', 4
Union All Select '023', N'重庆', 2----定义递规查询变量
DECLARE @City VARCHAR(8000)
SET @City=''SELECT @City=@City + REPLICATE(AA2 + ',',AA3) FROM @A
SELECT @City=LEFT(@City,LEN(@City)-1)----生成结果数据
SELECT AA1,a FROM dbo.Split(@City,',') INNER JOIN @A ON AA2=a
----附Split函数
CREATE Function Split(@Sql varchar(8000),@Splits varchar(10))
returns @temp Table (a varchar(100))
As
Begin
Declare @i Int
Set @Sql = RTrim(LTrim(@Sql))
Set @i = CharIndex(@Splits,@Sql)
While @i >= 1
Begin
Insert @temp Values(Left(@Sql,@i-1))
Set @Sql = SubString(@Sql,@i+1,Len(@Sql)-@i)
Set @i = CharIndex(@Splits,@Sql)
EndIf @Sql <> ''
Insert @temp Values (@Sql)
Return
End
能问一下为什么要用syscolumns和sysobjects这两个表?