我用的是SQL2008,存储过程里写了很长一串SQL查询语句,如下:CREATE PROCEDURE TEST @FSQL varchar(8000) ASSELECT ……
FROM (SELECT …… FROM TABLEA
UNION ALL
SELECT …… FROM TABLEB
UNION ALL
SELECT …… FROM TABLEC
UNION ALL
SELECT …… FROM TABLED
)AS TB
WHERE ('A'= @FSQL) 如果我传入参数@FSQL等于'A',就可以正常执行如果我传入参数@FSQL等于'A') AND (类型 IN ('优','良'),就无法正常执行了.但是,我如果直接将存储过程中的语句拷到"新建查询"里,并将@FSQL参数替换成'A') AND (类型 IN ('优','良'),也是可以正常执行的.换个方式,如下是可以正常执行的(我不想这样转,因为我SQL语句里有很多单引号,调试很不方便,而且容易出错).
Declare @sql varchar(8000)SET @sql='
SELECT ……
FROM (SELECT …… FROM TABLEA
UNION ALL
SELECT …… FROM TABLEB
UNION ALL
SELECT …… FROM TABLEC
UNION ALL
SELECT …… FROM TABLED
)AS TB
WHERE (''A''='+ @FSQL+')'exec (@sql)
问题:不想将存储过程里的SQL语句转用单引号后,再来加上参数执行,当参数为多条件查询时,有没有办法处理?
FROM (SELECT …… FROM TABLEA
UNION ALL
SELECT …… FROM TABLEB
UNION ALL
SELECT …… FROM TABLEC
UNION ALL
SELECT …… FROM TABLED
)AS TB
WHERE ('A'= @FSQL) 如果我传入参数@FSQL等于'A',就可以正常执行如果我传入参数@FSQL等于'A') AND (类型 IN ('优','良'),就无法正常执行了.但是,我如果直接将存储过程中的语句拷到"新建查询"里,并将@FSQL参数替换成'A') AND (类型 IN ('优','良'),也是可以正常执行的.换个方式,如下是可以正常执行的(我不想这样转,因为我SQL语句里有很多单引号,调试很不方便,而且容易出错).
Declare @sql varchar(8000)SET @sql='
SELECT ……
FROM (SELECT …… FROM TABLEA
UNION ALL
SELECT …… FROM TABLEB
UNION ALL
SELECT …… FROM TABLEC
UNION ALL
SELECT …… FROM TABLED
)AS TB
WHERE (''A''='+ @FSQL+')'exec (@sql)
问题:不想将存储过程里的SQL语句转用单引号后,再来加上参数执行,当参数为多条件查询时,有没有办法处理?
这个A应该是字段吧
怎么用引号变成字符了
FROM (SELECT …… FROM TABLEA
UNION ALL
SELECT …… FROM TABLEB
UNION ALL
SELECT …… FROM TABLEC
UNION ALL
SELECT …… FROM TABLED
)AS TB
WHERE 1=1 '+@FSQL)goEXEC TEST ' And A=''A'' and 类型 IN (''优'',''良'')'A--為字段時