非身经百战的高手不能解决的小问题--IN 参数传入
我这样写SQL没问题:select * from Show2003 where S1 in ('600600','600112');
但是我在程序里面(我用的是VC OLEDB,其实其他程序一样的也是这个问题)SQL这样写 select * from show2003 where S1 IN (?) , 也就是用参数。 就这样我调用的时候参数怎么传都得不到结果。试过n种可能性了,都不能成功,比如 "600600","600112" | "'600600'","'600112'" | "'600600','600112'" | | 600600','600112 | "600600'","600112'"
看我试过的各种可能就知道我猜测了很多中参数处理的可能。 就是不成功。
后来我发现用VS2010连上数据库,用SQLbuilder方式建立 select * from show2003 where S1 IN (?) 这样的查询,执行的时候会弹窗让你输入参数,各种方式试了也还是不行。
所以这个已经不是程序处理的问题了,要么是不支持IN 参数列表,要么就是输入参数规则不对。
请问一下又没人试过这样的情况成功的?
注:
1. 如果 IN参数中只输入一个项没问题,如 '600600'.
2. 参数是varchar(10)的,数值型的不要试了。
[解决办法]
是 Sql server 吗,它不直接支持数组参数,这样确实麻烦,可以看看这个
SQL SERVER “数组参数”
[解决办法]
我不会,楼主您别骂我
[解决办法]
无解?!
明白LZ的意思,所以特地用SQL跟踪了,发现SQL服务器在执行带参数的T-SQL语句时用的是执行储存过程sp_executesql,而且针对varchar的参数,在参数头尾判断单引号,参数中遇到单引号(')时使用了双单引号(不是双引号)替换来防止语句错误。
楼主用的工具应该是封装过执行语句的吧。MSSQL中的参数应该是@开头,不是用?代替吧?
顺便Mark下 看有没有高手能绕过SQL的引号替换法则来实现LZ的功能!!!!
[解决办法]
总的来说骂人是不对的,我们程序员都是高素质人群嘛。哈哈。因该像色情网站里的会员那么有素质才对嘛。
[解决办法]
--1SELECT * FROM dbo.Record WHERE phone IN ('86204527','94')--2DECLARE @sql VARCHAR(4000)SET @sql = 'SELECT * FROM dbo.Record WHERE phone IN (''86204527'',''94'')'EXEC (@sql)
[解决办法]