我是Informix的新手,但请记住使用SQL Server执行此操作。基本上我想查询给定表中的所有列的指定值。
我用Google搜索的所有内容都引用了SQL服务器。
想法?
答案 0 :(得分:2)
没有内置的方法可以做到这一点。你必须这样做:
SELECT * FROM Table WHERE Column1 = <your-value>
UNION
SELECT * FROM Table WHERE Column2 = <your-value>
UNION
...
是否有编程方式来生成大量UNION-SELECT语句?我的一些目标表有很多列。
你选择的武器是什么?那个数据库名称,表名和值是什么? 我选择的武器是SQLCMD,该程序可以从IIUG Software Archive获得,而不是微软的johnny - 最近创建的同名。
dbname=stores
table=customers
value=Raymond
sqlcmd -D'\n' -d $dbname -e \
"select 'SELECT * FROM $table WHERE ', c.colname,
'::VARCHAR(64) = ''$value''', 'UNION'
from informix.syscolumns as c
join informix.systables as t on t.tabid = c.tabid
where t.tabname = '$table' order by colno" |
sed '$d'
输出查询关键字为大写;生成它的元查询是小写的。元查询是使用SysColumns连接SysTables。 “-D '\n'
”选项表示“字段分隔符是换行符”(以及记录分隔符)。我确保UNION在它自己的一行上,以便轻松删除最后一个。我将列转换为VARCHAR(64),以便无论源类型如何都可以将它们与字符串进行比较 - 几乎与源类型无关,因为BYTE,TEXT,BLOB和CLOB列不会转换。如果您需要LIKE '%Raymond%'
谓词,请相应地调整查询。
使用Perl和DBI以及DBD :: Informix可以获得类似的结果。
使用DB-Access获取输出会很麻烦;您可能会使用内置的“OUTPUT TO "/dev/stdout" WITHOUT HEADINGS select ...
”,其中...是上面显示的查询的其余部分。然后你必须摆脱输出的最后两行,这比最后一行要困难得多。可能最简单的是蛮力 - 在输出上运行两个sed '$d'
副本,但解决方案不能很好地扩展。如果失败,请将输出保存在文件中,并使用ed
或ex
进行编辑。
SELECT * FROM customer WHERE
customer_num
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
fname
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
lname
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
company
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
address1
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
address2
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
city
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
state
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
zipcode
::VARCHAR(64) = 'Raymond'
UNION
SELECT * FROM customer WHERE
phone
::VARCHAR(64) = 'Raymond'
当上面的输出被送入SQLCMD的第二个副本时,它产生了输出:
105|Raymond|Vector|Los Altos Sports|1899 La Loma Drive||Los Altos|CA|94022|415-776-3249
答案 1 :(得分:0)
如果您想获得表格已确定的列,请执行&gt;&gt;
select t.tabname from systables t where t.tabid in (
select tabid from syscolumns c where c.colname = 'NAME_OF_THE_COLUMN')
[]中 ALF