类似“SELECT * FROM TABLEA AS A WHERE (A.FILED1 IN ('V1','V2','V3','V4')) ”中的条件:A.FILED1 IN ('V1','V2','V3','V4'),这里参数固定,设计存贮过程就好办:
CREATE PROCEDURE AProce @V1 varchar(10),@V2 varchar(10), @V3 varchar(10), @V4 varchar(10)
OUTPUT AS
SELECT
FROM * FROM TABLEA
WHERE FILED1 IN (@V1,@V2,@V3,@V4); 如果参数的个数不确定{即:A.FILED1 IN ('V1','V2','V3','V4',...,'Vn')},当要在SQL Server 的存贮过程接收动态参数时如何设计或实现?
实际需求中,当用户在一个查询条件中进行多项选择,即选择集合{'V1','V2','V3','V4',...,'Vn'}中的子集时,就产生动态参数问题,而复杂的计算要求必须在存贮过程中执行。
请各位兄弟帮忙想办法。
CREATE PROCEDURE AProce @V1 varchar(10),@V2 varchar(10), @V3 varchar(10), @V4 varchar(10)
OUTPUT AS
SELECT
FROM * FROM TABLEA
WHERE FILED1 IN (@V1,@V2,@V3,@V4); 如果参数的个数不确定{即:A.FILED1 IN ('V1','V2','V3','V4',...,'Vn')},当要在SQL Server 的存贮过程接收动态参数时如何设计或实现?
实际需求中,当用户在一个查询条件中进行多项选择,即选择集合{'V1','V2','V3','V4',...,'Vn'}中的子集时,就产生动态参数问题,而复杂的计算要求必须在存贮过程中执行。
请各位兄弟帮忙想办法。
@ss='1>0'+' or field1='''+@v1+''''
=号后面的你可以在delphi中生成
@ss varchar(1000);
@ss='field1='''+@v1+''''+' or'.....
=号后面的你可以在delphi中生成
问题来源:因为存贮过程要处理几个表,必须全部在存贮过程实现紧凑计算几万笔记录,然后返回结果集给Client。
因此,存贮过程必须能接收动态参数。
“@ss varchar(1000);
@ss='field1='''+@v1+''''+' or'..... ”
在这里,@ss 是varchar(1000)类型,在存贮过程中并不能解释为SQL语句。
SQL SERVER 如果能把 @ss 宏替代为SQL语句就不难了。
我认为这是个难题。
AS
SELECT
FROM * FROM TABLEA
WHERE ( ( CHARINDEX(LTRIM(RTRIM(FILED1))+';',@Vx ) >0 );
GO
---------------------------------------------------------
調用:
exec AProce 'V1'+';'+'V2'+';'+'V3'+';'+'V4'+';'
還是CHARINDEX()的有用,謝謝.