2012-10-18 60 views
0

我试图输出字符串加上一定的值,我已经从数据库中获得的。例如,在Microsoft Server 2008中,下面跑,我想它的方式:混合串查询的MySQL

SELECT 
'SELECT c.name COLLATE SQL_Latin1_General_CP1_CI_AS colName, o.name COLLATE SQL_Latin1_General_CP1_CI_AS tableName, ''' 
+ NAME + ''' db FROM ' + NAME 
+ '.sys.all_columns as c INNER JOIN ' + NAME 
+ 
'.sys.all_objects o ON c.object_id = o.object_id WHERE c.name like ''%password%'' AND type = ''U'' UNION' 
    FROM SYS.DATABASES 

返回如下:

SELECT c.NAME COLLATE SQL_LATIN1_GENERAL_CP1_CI_AS colName, 
     o.NAME COLLATE SQL_LATIN1_GENERAL_CP1_CI_AS tableName, 
     'master'         db 
    FROM MASTER.SYS.ALL_COLUMNS AS c 
     INNER JOIN MASTER.SYS.ALL_OBJECTS o 
       ON c.OBJECT_ID = o.OBJECT_ID 
WHERE c.NAME LIKE '%password%' 
     AND TYPE = 'U' 
UNION 
SELECT c.NAME COLLATE SQL_LATIN1_GENERAL_CP1_CI_AS colName, 
     o.NAME COLLATE SQL_LATIN1_GENERAL_CP1_CI_AS tableName, 
     'tempdb'         db 
    FROM TEMPDB.SYS.ALL_COLUMNS AS c 
     INNER JOIN TEMPDB.SYS.ALL_OBJECTS o 
       ON c.OBJECT_ID = o.OBJECT_ID 
WHERE c.NAME LIKE '%password%' 
     AND TYPE = 'U' 
UNION 

但是当我尝试在MySQL类似的事情:

SELECT 
'SELECT c.name COLLATE SQL_Latin1_General_CP1_CI_AS colName, o.name COLLATE SQL_Latin1_General_CP1_CI_AS tableName, ''' 
+ DB + ''' db FROM ' + DB 
+ '.sys.all_columns as c INNER JOIN ' + DB 
+ 
'.sys.all_objects o ON c.object_id = o.object_id WHERE c.name like ''%password%'' AND type = ''U'' UNION' 
    FROM DB 

它只返回我想要的记录的空白行。谁能帮忙?

+1

**查询你进行什么**实际? – zerkms

+0

@zerkms我想通过使用所描述的方法来创建我想要做的查询,如果这是有道理的。因此,首先使用SELECT DB FROM DB获取数据库名称,然后该查询的结果将是另一个我将单独运行的查询。 – Alias

+0

它工作在相反的方向:首先您撰写与静态值工作查询,**只有经过**你试图建立在运行时 – zerkms

回答

1

在MySQL中你需要的concat功能,而不是+操作:

SELECT concat(
'SELECT c.name COLLATE SQL_Latin1_General_CP1_CI_AS colName, o.name COLLATE SQL_Latin1_General_CP1_CI_AS tableName, ''' 
, DB , ''' db FROM ' , DB 
, '.sys.all_columns as c INNER JOIN ' , DB 
, 
'.sys.all_objects o ON c.object_id = o.object_id WHERE c.name like ''%password%'' AND type = ''U'' UNION' 
) FROM DB