DECLARE @list_id bigint
DECLARE @region varchar(2)
DECLARE @country varchar(2)
DECLARE @regfrom datetime
DECLARE @regto datetime
DECLARE @isworkingon varchar(2)
DECLARE @isward varchar(2)
DECLARE @email varchar(128)

DECLARE insert_cursor CURSOR FOR SELECT list_id,region,country,regfrom,regto,isworkingon,isaward,email FROM lists WHERE list_type_id=1
DECLARE @sql varchar(8000)
OPEN insert_cursor FETCH NEXT FROM insert_cursor INTO @list_id,@region,@country,@regfrom,@regto,@isworkingon,@isward,@email WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql=''
SET @sql = @sql+'INSERT INTO query_list_members (list_id,solver_id) '
SET @sql = @sql+'SELECT '+CAST(@list_id as varchar)+',a.id from solvers a INNER JOIN accounts b ON a.id=b.id INNER JOIN addresses c ON b.address_id=c.id INNER JOIN countries d ON c.country_id=d.id WHERE 1=1 '
IF @region IS NOT NULL 
SET @sql = @sql + 'AND d.region_id='''+@region+''''
IF @country IS NOT NULL
SET @sql = @sql + ' AND d.id='''+@country+''''
IF @regfrom IS NOT NULL
SET @sql = @sql + ' AND b.date_created >='''+CONVERT(varchar(10),@regfrom,120)+''''
IF @regto IS NOT NULL
SET @sql = @sql + ' AND b.date_created <='''+CONVERT(varchar(10),@regTo,120)+''''
IF @isworkingon='Y'
SET @sql = @sql + ' AND EXISTS (SELECT solver_id FROM challenge_engagements WHERE solver_id=a.id)'
ELSE IF @isworkingon='N'
SET @sql = @sql + ' AND NOT EXISTS (SELECT solver_id FROM challenge_engagements WHERE solver_id=a.id)'
IF @isward='Y'
SET @sql = @sql + ' AND EXISTS (SELECT solver_id FROM submissions WHERE solver_id=a.id)'
ELSE IF @isward='N'
SET @sql = @sql + ' AND NOT EXISTS (SELECT solver_id FROM submissions WHERE solver_id=a.id)'
IF @email IS NOT NULL
SET @sql = @sql + ' AND b.EMAIL LIKE ''%'+@email+'%'''
print @sql
BEGIN TRAN                           ---就是这句
DELETE query_list_members WHERE list_id=@list_id
IF @@ERROR=0
BEGIN
EXEC(@sql)
IF @@ERROR=0
COMMIT TRAN
ELSE
ROLLBACK TRAN
END
ELSE
ROLLBACK TRAN
FETCH NEXT FROM insert_cursor INTO @list_id,@region,@country,@regfrom,@regto,@isworkingon,@isward,@email
END
CLOSE insert_cursor
DEALLOCATE insert_cursor我是问begin tran应该放在while外面还是里面啊?