这是存储过程,不要被代码吓着,其实实现的是很简单的功能!!!现在问题就出在dbo.f_splitstr('+ltrim(@UserIdList)+','','+') fs)这一句,其实就是在分页的条件里面 调用了一个函数 
---------字符串分割函数------------
---@SourceSql 要分割的字符串,@StrSeprate 分割字符串的符号
   function   [dbo].[f_splitstr](@SourceSql   varchar(8000),@StrSeprate   varchar(100))  现在问题就是里面的逗号有问题!!!f_splitstr('1,2,3' , ',')
这怎么在我的存储过程中表示!!!
ALTER PROC [dbo].[DynamicContentSel_sp](@Types int,@HasImg int,@HasVideo int,@HasAudio int,@PageSize int,@PageIndex int,@UserIdList nvarchar(max))
AS
BEGIN
------查看近一个月 随便看看文章列表 
------@Types 等于-1表示 前台的原创和分享都选择了!
-----@Type 博文类型(1:原创、2:分享)
-----@HasImg是否含图片(0:没有 1:有)
-----@HasVideo是否含视频(0:没有 1:有)
-----@HasAudio是否含音乐(0:没有 1:有)
DECLARE @TotalRecord int
Declare @strWhere nvarchar(max)
IF @Types=1 ---原创
begin
set  @strWhere='CreatedOn BETWEEN (SELECT dateadd(day,-30,GETDATE()))AND (select convert(varchar(10),getdate())) AND Status=0 and vw_Articles.HasImg='+ltrim(@HasImg)+'and UserId IN (SELECT * FROM  dbo.f_splitstr('+ltrim(@UserIdList)+','','+') fs) and vw_Articles.HasVideo='+ltrim(@HasVideo)+' and vw_Articles.HasAudio='+ltrim(@HasAudio)

exec PageChange_sp 'vw_Articles','*','CreatedOn desc',@strWhere,@PageSize,@PageIndex,@TotalRecord out 
SELECT * FROM (select @TotalRecord AS TotalRecord )  TotalTable
--
--SELECT * FROM  vw_Articles
-- WHERE HasImg=@HasImg AND HasVideo=@HasVideo AND HasAudio=@HasAudio
-- AND CreatedOn BETWEEN (SELECT dateadd(day,-30,GETDATE()))
-- AND (select convert(varchar(10),getdate())) AND Status=0
END
if @Types=2 ---分享
BEGIN
select * into #TempTable from( 
select art.ArticleId,art.Title,art.Contents,art.TextContent,art.ClickCount,art.ReplyCount,
art.ShareCount,art.HasImg,art.HasVideo,art.HasAudio,art.CatalogId,art.CatalogName,
art.Status,art.UserId,art.CreatedOn,art.CreatedBy
from vw_Articles art inner join share_tb sha on
sha.ArticleId=art.ArticleId 
WHERE  art.HasImg=@HasImg AND art.HasVideo=@HasVideo AND art.HasAudio=@HasAudio
AND art.CreatedOn BETWEEN (SELECT dateadd(day,-30,GETDATE()))AND (select convert(varchar(10),getdate())) AND art.Status=0) a

set  @strWhere='CreatedOn BETWEEN (SELECT dateadd(day,-30,GETDATE()))AND (select convert(varchar(10),getdate())) and UserId IN (SELECT * FROM  dbo.f_splitstr('+ltrim(@UserIdList)+','','') fs) AND Status=0 and vw_Articles.HasImg='+ltrim(@HasImg)+'vw_Articles.HasVideo='+ltrim(@HasVideo)+'vw_Articles.HasAudio='+ltrim(@HasAudio)

exec PageChange_sp '#TempTable','*','CreatedOn desc','',@PageSize,@PageIndex,@TotalRecord out 
SELECT * FROM (select @TotalRecord AS TotalRecord )  TotalTable
drop table #TempTable
END if @Types=-1---原创和分享
begin
select * into #TempTable1 from( 
select art.ArticleId,art.Title,art.Contents,art.TextContent,art.ClickCount,art.ReplyCount,
art.ShareCount,art.HasImg,art.HasVideo,art.HasAudio,art.CatalogId,art.CatalogName,
art.Status,art.UserId,art.CreatedOn,art.CreatedBy
from vw_Articles art inner join share_tb sha  on
sha.ArticleId=art.ArticleId and art.UserId IN (SELECT * FROM  dbo.f_splitstr(ltrim(@UserIdList),',') fs)  
WHERE  art.HasImg=@HasImg AND art.HasVideo=@HasVideo AND art.HasAudio=@HasAudio
AND art.CreatedOn BETWEEN (SELECT dateadd(day,-30,GETDATE()))AND (select convert(varchar(10),getdate())) 
AND art.Status=0 
union all
select art1.ArticleId,art1.Title,art1.Contents,art1.TextContent,art1.ClickCount,art1.ReplyCount,
art1.ShareCount,art1.HasImg,art1.HasVideo,art1.HasAudio,art1.CatalogId,art1.CatalogName,
art1.Status,art1.UserId,art1.CreatedOn,art1.CreatedBy
from vw_Articles art1
WHERE  art1.HasImg=@HasImg AND art1.HasVideo=@HasVideo AND art1.HasAudio=@HasAudio and art1.UserId IN (SELECT * FROM  dbo.f_splitstr(ltrim(@UserIdList),',') fs) 
AND art1.CreatedOn BETWEEN (SELECT dateadd(day,-30,GETDATE()))AND (select convert(varchar(10),getdate())) AND art1.Status=0 
) a

exec PageChange_sp '#TempTable1','*','CreatedOn desc','',@PageSize,@PageIndex,@TotalRecord out 
SELECT * FROM (select @TotalRecord AS TotalRecord )  TotalTable
drop table #TempTable1
-----art.UserId IN (SELECT * FROM  dbo.f_splitstr(ltrim(@UserIdList),',') fs) 
endEND

解决方案 »

  1.   

    f_splitstr(''''1,2,3'''' , '''','''')
      

  2.   


    select '''a''','''b','c''','d'/*
    ---- ---- ---- ----
    'a'  'b   c'   d(1 行受影响)
    */
      

  3.   

    dbo.f_splitstr('+ltrim(@UserIdList)+','','','+')
      

  4.   

    insert   into   a(a1)   values( ' ' ' ');     --用兩個單引號代替一個.
      

  5.   

    insert   into   a(a1)   values(char(39));
      

  6.   

    在insert   中要把你的字符串中所有的单引号( ')   都改成两个( ' '),才能做为一个单引号插入
      

  7.   

    dbo.f_splitstr('+ltrim(@UserIdList)+',',''+') fs)是不是这样试试
      

  8.   

    dbo.f_splitstr('“+ltrim(@UserIdList)+”',',‘'+') fs)