declare @start nvarchar(20)
declare @end nvarchar(20)
declare @tempno nvarchar(20)
declare @strSql nvarchar(4000)
--declare @strSql varchar(8000)
declare @prdtid nvarchar(20)
set @start='2011-10-20'
set @end='2011-10-21'
set @prdtid='0300029'
declare salenoCursor cursor for
select refno from mf_prdtin where createdt>@start and createdt<@end order by refno desc
open salenoCursor
fetch salenoCursor into @tempno
while @@FETCH_STATUS=0
begin
if @tempno is not null and ltrim(rtrim(@tempno))<>'' and @@FETCH_STATUS=0
begin
--print @tempno
if @strSql is null
begin
--set @strSql=N'select * from mf_prdtpur_de where pur_id='''+ltrim(rtrim(@tempno))+''' and prdtid='''+ltrim(rtrim(@prdtid))+''''
set @strSql=N'select * from mf_prdtpur_de where pur_id='''+ltrim(rtrim(@tempno))+''''
end
else
begin
--set @strSql=@strSql+' union '+'select * from mf_prdtpur_de where pur_id='''+ltrim(rtrim(@tempno))+''' and prdtid='''+ltrim(rtrim(@prdtid))+''''
set @strSql=@strSql+' union '+'select * from mf_prdtpur_de where pur_id='''+ltrim(rtrim(@tempno))+''''
end
end
fetch next from salenoCursor into @tempno
end
close salenoCursor
deallocate salenoCursor
select @strSql
If Object_Id( 'Tempdb.dbo.#S') Is Not NULL--#Test 为临时表名
begin
Print 'Exists Table'
drop table #S
end
Else begin
Print 'Not Exists Table'
CREATE TABLE #S(
[pur_id] [char](10) NOT NULL,
[prdtid] [char](7) NOT NULL,
[num] [decimal](18, 0) NULL,
[price] [money] NULL,
[status] [int] NULL,
[ispay] [int] NULL,
[ying_pay] [money] NULL,
[real_pay] [money] NULL,
[recnum] [float] NULL,
[otype] [int] NULL,
[ying_num] [float] NULL)
end
--exec(@strSql)
insert into #S exec(@strSql)
select * from #S where prdtid='0300029'
go
注:不能使用注释的语句原因是:varchar最大长度是8000,nvarchar最大长度是4000。一旦超出这个长度需要使用临时表来保存记录的结果,然后在临时表里面进行进一步的操作。