+ -
当前位置:首页 → 问答吧 → 储存过程怎么让一条带有变量的SQL语句在变量前后加单引号

储存过程怎么让一条带有变量的SQL语句在变量前后加单引号

时间:2011-12-09

来源:互联网

ALTER PROCEDURE [dbo].[proc_business]
 @user varchar(20),
 @city varchar(20),
AS

BEGIN
 declare @wheretrue varchar(100)
 if(@city='') set @wheretrue='select DEPT_CODE from T_USERDEPT where USER_NO='+@user+''
 else set @wheretrue ='select DEPT_CODE from T_DEPT where BRANCH_CODE='+@city+''

 select * from P_BUSINESS_LIST where DEPT_CODE in (@wheretrue)
END

我是想根据@city这个参数有没有值来产生不同的条件,条件是产生了
select DEPT_CODE from T_DEPT where BRANCH_CODE=HGZL002
可是BRANCH_CODE,USER_NO这两个字段是varchar类型的,所以产生出来的SQL因为少了两个单引号怎么也查不到值。

作者: HuangKJSay   发布时间: 2011-12-09

SQL code
set @wheretrue ='select DEPT_CODE from T_DEPT where BRANCH_CODE='''+@city+''''

作者: ssp2009   发布时间: 2011-12-09

SQL code
if(@city='') set @wheretrue='select DEPT_CODE from T_USERDEPT where USER_NO='''+@user+''''
 else set @wheretrue ='select DEPT_CODE from T_DEPT where BRANCH_CODE='''+@city+''''

作者: HEROWANG   发布时间: 2011-12-09

'''来转义。

作者: fredrickhu   发布时间: 2011-12-09

SQL code
ALTER PROCEDURE [dbo].[proc_business]
 @user varchar(20),
 @city varchar(20),
AS

BEGIN
 declare @wheretrue varchar(100)
 if(@city='') set @wheretrue='select DEPT_CODE from T_USERDEPT where USER_NO='''+ltrim(@user)+''''
 else set @wheretrue ='select DEPT_CODE from T_DEPT where BRANCH_CODE='''+@city+''''

 select * from P_BUSINESS_LIST where DEPT_CODE in (' +ltrim(@wheretrue)+ ')
END

作者: fredrickhu   发布时间: 2011-12-09

SQL code
ALTER PROCEDURE [dbo].[proc_business]
 @user varchar(20),
 @city varchar(20),
AS

BEGIN
 declare @wheretrue varchar(100)
 if(@city='') set @wheretrue='select DEPT_CODE from T_USERDEPT where USER_NO='''+ltrim(@user)+''''
 else set @wheretrue ='select DEPT_CODE from T_DEPT where BRANCH_CODE='''+@city+''''

 exec('select * from P_BUSINESS_LIST where DEPT_CODE in (' +ltrim(@wheretrue)+ ')')
END

作者: fredrickhu   发布时间: 2011-12-09