Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
混合字符串和查询MySQL_Mysql_Sql_Join - Fatal编程技术网

混合字符串和查询MySQL

混合字符串和查询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

我试图输出一个字符串加上从数据库中获得的某些值。例如,在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 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吗?