一个存储过程的片段select .... from ..where ... and F_SubjectCode in (@mKind)
如何给这个@mKind赋值??比如我想要传入值后为 F_SubjectCode in ('101001,'101002','101003')
我是这样写的
...
...
mSubject:='';
for i:=0 to mTString.Count-1 do
begin
mSubject:=mSubject+''''+mTString.Strings[i]+'''';
if i< mTString.Count-1 then mSubject:=mSubject+',';
end; with AdoStoredProc1. do
begin
Close;
Parameters[1].Value:=...
Parameters[2].Value:=...;
Parameters[3].Value:=mSubject; //这儿对应的是存储过程的@Kind参数
Parameters[4].Value:=...;
Parameters[5].Value:=...;
Parameters[6].Value:=.....;
Open;
end;
能运行,却查询不到结果
急盼解决!!!!
如何给这个@mKind赋值??比如我想要传入值后为 F_SubjectCode in ('101001,'101002','101003')
我是这样写的
...
...
mSubject:='';
for i:=0 to mTString.Count-1 do
begin
mSubject:=mSubject+''''+mTString.Strings[i]+'''';
if i< mTString.Count-1 then mSubject:=mSubject+',';
end; with AdoStoredProc1. do
begin
Close;
Parameters[1].Value:=...
Parameters[2].Value:=...;
Parameters[3].Value:=mSubject; //这儿对应的是存储过程的@Kind参数
Parameters[4].Value:=...;
Parameters[5].Value:=...;
Parameters[6].Value:=.....;
Open;
end;
能运行,却查询不到结果
急盼解决!!!!
exec('select .... from ..where ... and F_SubjectCode in (@mKind)')
更奇怪的是,如果我用AdoQuery能得到正确的结果
with AdoQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('...);
SQL.Add(mSubject);
SQL.Add('...');
Parameters[].Value:=..;
..
....
Open;
end;
这样是可以的
-----------------------------------------------------------
IN
确定给定的值是否与子查询或列表中的值相匹配。语法
test_expression [ NOT ] IN
(
subquery
| expression [ ,...n ]
) -------------------------------------------------------
一个参数在直接执行的SQL语句中只能代表一个表达式,这个表达式 可以是各种类型,你想用一个字符串代表N个表达式.除非是用 动态SQL了.像
exec ('select .. from tbname where name in (' + @mKind + ')')
这样来组合吧.
也是一样的道理 他最终也是生成了一个 SQL 语句提交的.
关于IN子句用参数代替时,多参数该如何处理?《查询》
http://access911.net/index.asp?u1=a&u2=72FAB51E16DCE9F3