首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 拼凑

2013-08-16 
SQL拼接alter Proc GetAnswer@Count varchar(5) false,@Time Varchar(5) false,@Support varchar(5)fal

SQL 拼接


alter Proc GetAnswer

@Count varchar(5) =false,
@Time Varchar(5) =false,
@Support varchar(5)=false

as

declare @sql nvarchar(max)
set @sql='select AA.ID,AA.TopicID,AA.Content,AA.Posttime,
        U.UserName,U.Support,U.Avatar
        from Ask_Answer as AA
        join Jst_User.dbo.User_Info as U on U.Uid=AA.UserID'
        
if(@Count <> 'false')
begin
 set @sql='select Top '+@Count+' AA.ID,AA.TopicID,AA.Content,AA.Posttime,
        U.UserName,U.Support,U.Avatar
        from Ask_Answer as AA
        join Jst_User.dbo.User_Info as U on U.Uid=AA.UserID'
        if(@Time = 'True')
        begin
        set @sql='select Top '+@Count+' AA.ID,AA.TopicID,AA.Content,AA.Posttime,
        U.UserName,U.Support,U.Avatar
        from Ask_Answer as AA
        join Jst_User.dbo.User_Info as U on U.Uid=AA.UserID order by AA.Posttime desc'
        end
        if(@Support  = 'True')
        begin
        set @sql='select Top '+@Count+' AA.ID,AA.TopicID,AA.Content,AA.Posttime,
        U.UserName,U.Support,U.Avatar
        from Ask_Answer as AA
        join Jst_User.dbo.User_Info as U on U.Uid=AA.UserID order by U.Support desc'
        end
end
exec sp_executesql @sql      
        
 

求高手  使用拼接的方式 帮我简化下SQL语句 谢谢


[解决办法]
CREATE PROC UP_procname
AS
begin
PRINT '没有参数的存储过程'
END

EXEC UP_procname

[解决办法]


alter Proc GetAnswer   
@Count varchar(5) =false, 
@Time Varchar(5) =false, 
@Support varchar(5)=false  
as  
declare @sql nvarchar(max) 
if(@Count<>'false')
begin 
set @sql='select Top '+@Count+' 
AA.ID,AA.
TopicID,
AA.Content,
AA.Posttime,
U.UserName,
U.Support,
U.Avatar         
from Ask_Answer as AA 
join Jst_User.dbo.User_Info as U 
on U.Uid=AA.UserID' 
if(@Time = 'True')
begin 
set @sql+='order by AA.Posttime desc'
end
if(@Support  = 'True')
begin  
set @sql +='order by AA.Posttime desc'
end
end
else
begin    
set @sql= 'select AA.ID,
AA.TopicID,
AA.Content,
AA.Posttime,
U.UserName,
U.Support,
U.Avatar
from Ask_Answer as AA  
join Jst_User.dbo.User_Info as U 
on U.Uid=AA.UserID' 
end
exec sp_executesql @sql 

[解决办法]
 CREATE PROC GetAnswer   
 @Count VARCHAR(3) =false, 
 @Time VARCHAR(4) =false, 
 @Support VARCHAR(4)=false  
 AS  
 DECLARE @sql NVARCHAR(MAX) 
 SET @sql=N'SELECT' 
               
IF(@Count <> 'false')
 SET @sql=@sql+N'Top '+@Count+''     

 SET @sql=@sql+N' AA.ID
,AA.TopicID
,AA.Content
,AA.Posttime
,U.UserName
,U.Support
,U.Avatar         
  from Ask_Answer as AA         
  join Jst_User.dbo.User_Info as U on U.Uid=AA.UserID'
     


IF(@Time = 'True' )               
SET @sql=@sql+N' order by AA.Posttime desc'     
      
IF(@Support  = 'True')               
SET @sql=@sql+N' order by U.Support desc'        

EXEC SP_EXECUTESQL @sql   --拼接是这样,逻辑自己改改 


[解决办法]
ALTER Proc GetAnswer
@Count varchar(5) = 'false',
@Time Varchar(5) ='false',
@Support varchar(5)='false'
as
 
declare @sql nvarchar(max)
SET @sql = N'
select {1}
AA.ID,AA.TopicID,AA.Content,AA.Posttime,U.UserName,U.Support,U.Avatar
from Ask_Answer as AA
join Jst_User.dbo.User_Info as U 
on U.Uid=AA.UserID
{2}
'
  
if(@Count <> 'false')
begin
set @sql=REPLACE(@sql, '{1}', ' top('+ @Count +') ')
if(@Support  = 'True')
set @sql=REPLACE(@sql, '{2}', '  order by U.Support desc ')
ELSE if(@Time = 'True')
set @sql=REPLACE(@sql, '{2}', '  order by AA.Posttime desc ')
ELSE
SET @sql=REPLACE(@sql, '{2}', '')  
END
ELSE
BEGIN
set @sql=REPLACE(REPLACE(@sql, '{1}', ''), '{2}', '')
end
--PRINT @sql      
exec sp_executesql @sql 
go

[解决办法]
5楼的 不错

热点排行