动态sql

declare @sql nvarchar(2000)

declare @Sign_Count int

declare @tablename varchar(30)='SignUpSuccess.Record201605'

DECLARE @IN_iUserDBID bigint=100051

DECLARE @IN_biSubMatchSerialNo varchar(255)='2016050403'

set @sql='select @Sign_Count=count(1)  from '+ @tablename +' where  UserDBID='+convert(varchar(255),@IN_iUserDBID)+' and  MatchSerialNo='+convert(varchar(255),@IN_biSubMatchSerialNo)+'  and convert(date,QuitTime)=convert(date,getdate())'

--select @sql

exec sp_executesql @sql, N'@Sign_Count int out ', @Sign_Count out

 

 

动态sql 2


DECLARE @SQLString nvarchar(500);  
DECLARE @ParmDefinition nvarchar(500);  
declare  @inPropID varchar(255)='31,37';
declare @BusinessEntityID int  ;
/* Build the SQL string one time.*/  
SET @SQLString =  
     N'select aa.AccountRecever from
    (
        select aa.AccountRecever,cc.ProductID
        from OrderDetail  aa
        inner join [OrderDetail.Product] bb on aa.OrderNum=bb.OrderNum
        inner join [Product.ExchangeRelationship] cc on bb.ExchangeRelationshipID=cc.id
        where  aa.OrderState=2
        and aa.ProductTypeID=3
        and (@inPropID is null  or convert(varchar(20),cc.ProductID) in(@inPropID))
        group by aa.AccountRecever,cc.ProductID
    )aa
    group by  aa.AccountRecever
    having COUNT(1)>=@BusinessEntityID
    ';  
SET @ParmDefinition = N'@BusinessEntityID tinyint,@inPropID varchar(255)';  
/* Execute the string with the first parameter value. */  
EXECUTE sp_executesql @SQLString, @ParmDefinition,  
                      @BusinessEntityID = 1
                      ,@inPropID='31,37'  ; 

 

 

动态sql 3 中间加了top

declare @v_Now datetime=getdate()
DECLARE @SQLString nvarchar(2000);  
DECLARE @ParmDefinition nvarchar(500);  
declare  @inUserid  int=1001296;
declare @n_Count int
select @n_Count=15 - COUNT(1) from   [UserInfo.DailyTaskInfo] where UserID=@inUserID
--select  @n_Count
SET @SQLString =  
     N'INSERT INTO [UserInfo.DailyTaskInfo]
               ([UserID]
               ,[TaskID]
               ,[ProduceTime]
               ,[UserCompleteNumber]
               ,[TaskAchieveStateID]
               ,[FirstReceiveTime]
               ,[CompleteTime]
               ,[GetRewardTime]
               ,[OrignalAchievementID])           
    select top (@n_Count)  @inUserID,aa.ID,@v_Now, 0,1,null,null,null,aa.ID
    from TaskInfo  aa
    left join [UserInfo.DailyTaskInfo] bb on aa.ID=bb.OrignalAchievementID
    where aa.ParentID=0 /*必须分父级任务,非父级任务已经在前面更新了,随机的任务也全部是0*/
    and aa.AbleFlag=1 /*启用*/
    and aa.EffectTime<=@v_Now and ISNULL(ExpiratTime,'''+'9999-12-31'+''')>=@v_Now /*未过期*/
    and aa.IfDeleteFlg=1 /*未删除*/
    and bb.UserID is null /*用户未分配该条父级任务*/
    order by row_number()over(order by abs((aa.RandomOrFixFlag-1)*CHECKSUM(NEWID())),aa.TaskUpdateCycleID) /*优先选择固定任务(因为固定的ID为1所以用RandomOrFixFlag-1保证固定的全部优先),按天更新的任务(按天更新表示每天都应该出现这个固定任务,故为最优先)*/
  ';  
--select @SQLString
SET @ParmDefinition = N'@n_Count int,@inUserid  int,@v_Now datetime';  
/* Execute the string with the first parameter value. */  
EXECUTE sp_executesql @SQLString
                    , @ParmDefinition
                    , @n_Count
                    ,@inUserID
                    ,@v_Now  ;  
 

posted @ 2016-06-01 14:01  晴天MM  阅读(203)  评论(0)    收藏  举报