读书人

SQL 拼凑

发布时间: 2013-08-16 14:29:57 作者: rapoo

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楼的 不错

读书人网 >SQL Server

热点推荐