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 ;