--拼SQl中常见问题
--1.int型参数放在拼sql中运行出错,提示该int型前面的那些字符串(如下存储过程中‘aWHEREARID=casewhen“)无法转化为整形int
--解决方法将整形参数转化为字符串即可如'+cast(@ARIDasvarchar(50))+'
--2.字符串类型参数提示列名'fdfd'(假设@ABID=fdfd)无效,
--解决方法将整如ABID='''+@ABID+'''即可
/*------------------------------------------------------------
*创建人:马锋
*创建时间:2011年08月12日10点37分
*描述:按条件读取分页数据
------------------------------------------------------------*/
alterPROCEDURE[Analys_Arch_Place]
@pagesizeint,--每页显示的记录数
@pageindexint,--当前页索引,最小值为1
@RecordCountintoutput,--总记录数,<0时不统计结果记录
@TabNamevarchar(50),
@ARIDint,
@ACIDint,
@AJIDint,
@ABIDvarchar(50)
AS
SETNOCOUNTON
createtable#indextb(rowidINTIDENTITY(1,1),nidINT)
declare@sqlvarchar(2000)
set@sql='insertinto#indextb(nid)SELECTa.ArchID
FROM'+@TabName+'aWHERE
ARID=casewhen'+cast(@ARIDasvarchar(50))+'<1thenARIDelse'+cast(@ARIDasvarchar(50))+'endand
ACID=casewhen'+cast(@ACIDasvarchar(50))+'<1thenACIDelse'+cast(@ACIDasvarchar(50))+'endand
AJID=casewhen'+cast(@AJIDasvarchar(50))+'<1thenAJIDelse'+cast(@AJIDasvarchar(50))+'endand
ABID='''+@ABID+'''andStatus>=3'
exec(@sql)
DECLARE@PageLowerBoundINT
DECLARE@PageUpperBoundINT
SET@PageLowerBound=(@pageindex-1)*@pagesize
SET@PageUpperBound=@PageLowerBound+@pagesize
SETROWCOUNT@PageUpperBound--最多执行行数若下面还有超过此值的行数,请注释此行
IF(@RecordCount<0)
BEGIN
SELECT@RecordCount=Count(1)FROM#indextb
END
if(@TabName='ddd')
BEGIN
SELECTa.*
FROMddda,#indextbt
WHEREa.[ArchID]=t.nidandt.rowid>@PageLowerBoundandt.rowid<=@PageUpperBound
END
SETNOCOUNTOFF
--3.拼Sql中的“,”号问题
CREATEPROCEDURE[up_ARCH_BatchVerify]
@TableNamenvarchar(100),
@IdsNVARCHAR(2000),
@ReviewStaffIDnvarchar(50)
AS
DECLARE@signchar(1)
SET@sign=','--如果“,”直接放在拼sql中会提示逗号错误
DECLARE@SQLnvarchar(4000)
set@SQL='update'+@TableName+'setStatus=2,ReviewStaffID='+@ReviewStaffID+'whereArchIDin(SELECT*FROMf_split('''+@Ids+''','''+@sign+'''))'
EXECsp_executesql@SQL