混合字符串和查询MySQL
我试图输出一个字符串加上从数据库中获得的某些值。例如,在Microsoft Server 2008中,以下内容按我希望的方式运行:混合字符串和查询MySQL,mysql,sql,join,Mysql,Sql,Join,我试图输出一个字符串加上从数据库中获得的某些值。例如,在Microsoft Server 2008中,以下内容按我希望的方式运行: 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
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
它只返回我想要的记录的空行。有人能帮忙吗?在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
您实际执行的查询是什么?@zerkms如果有意义的话,我想使用所描述的方法创建我想要执行的查询。因此,首先使用SELECT DB FROM DB获取DB名称,然后该查询的结果将是另一个我将单独运行的查询。其工作方式与此相反:首先,您编写使用静态值的查询,然后在运行时尝试构建类似的查询。请尝试删除排序规则。它们可能不同。你能再详细说明一下@zerkms吗?