2016-04-25 95 views
0

我有一组在提到它的任务和源文件的.sql文件内的文本文件:
文件看起来像如下:读取一个SQL文件

SET @NAME='ABC' 
SOURCE c:/dev/test.sql 
SOURCE c:/dev/test1.sql 
. 
. 
. 
SOURCE c:/dev/test100.sql 

SET @NAME='MNO' 
SOURCE c:/dev/test.sql 
SOURCE c:/dev/test1.sql 
. 
. 
. 
SOURCE c:/dev/test100.sql 

SOURCE c:/dev/*提到的文件是使用SET命令为每个分配重复。

有没有一种方法可以从不同的测试文件中读取文件名,这样我就可以避免我的.sql文件中的代码冗余。

任何帮助,将不胜感激!

感谢

+1

首先,你需要确定你正在使用的DBMS。当然,你不需要这个为MySQL,SQL服务器和甲骨文?即使你这样做,答案也会大不相同。 –

+0

我正在使用mysql。无论如何要尽量减少代码?我有100个sqls作为输入到'SOURCE ...' – Neethu

+0

希望有人能够提供帮助。我是一个SQL Server的家伙,甚至不能拼写MySQL。 –

回答

1

尝试:

文件:/path/to/file/test.sql

SELECT CONCAT('FROM test.sql @`NAME`: ', @`NAME`); 

文件:/path/to/file/allTestFiles.sql

SOURCE /path/to/file/test.sql 
SOURCE /path/to/file/test1.sql 
SOURCE /path/to/file/test2.sql 
# . 
# . 
# . 
# SOURCE /path/to/file/test100.sql 

文件:/path/to/file/master.sql

SET @`NAME` := 'ABC'; 
SOURCE /path/to/file/allTestFiles.sql 

SET @`NAME` := 'MNO'; 
SOURCE /path/to/file/allTestFiles.sql 

测试:

mysql> SOURCE /path/to/file/master.sql 
Query OK, 0 rows affected (0.00 sec) 

+--------------------------------------------+ 
| CONCAT('FROM test.sql @`NAME`: ', @`NAME`) | 
+--------------------------------------------+ 
| FROM test.sql @`NAME`: ABC     | 
+--------------------------------------------+ 
1 row in set (0.00 sec) 

+---------------------------------------------+ 
| CONCAT('FROM test1.sql @`NAME`: ', @`NAME`) | 
+---------------------------------------------+ 
| FROM test1.sql @`NAME`: ABC     | 
+---------------------------------------------+ 
1 row in set (0.00 sec) 

+---------------------------------------------+ 
| CONCAT('FROM test2.sql @`NAME`: ', @`NAME`) | 
+---------------------------------------------+ 
| FROM test2.sql @`NAME`: ABC     | 
+---------------------------------------------+ 
1 row in set (0.00 sec) 

Query OK, 0 rows affected (0.00 sec) 

+--------------------------------------------+ 
| CONCAT('FROM test.sql @`NAME`: ', @`NAME`) | 
+--------------------------------------------+ 
| FROM test.sql @`NAME`: MNO     | 
+--------------------------------------------+ 
1 row in set (0.00 sec) 

+---------------------------------------------+ 
| CONCAT('FROM test1.sql @`NAME`: ', @`NAME`) | 
+---------------------------------------------+ 
| FROM test1.sql @`NAME`: MNO     | 
+---------------------------------------------+ 
1 row in set (0.00 sec) 

+---------------------------------------------+ 
| CONCAT('FROM test2.sql @`NAME`: ', @`NAME`) | 
+---------------------------------------------+ 
| FROM test2.sql @`NAME`: MNO     | 
+---------------------------------------------+ 
1 row in set (0.00 sec)