sqlfile 不加载任何数据。它只是执行(并在指定大声选项时显示结果),而不将任何数据加载到 Stata 中。这有点违反直觉,但却是事实。 odbc 命令的 pdf/dead tree 手册条目中对原因的解释有些不透明。
这是一个更有帮助的答案。假设您有名为 sqlcode.sql 的 SQL 文件。你可以在Stata中打开它(只要它不是too长,哪里too long取决于您对 Stata 的喜好)。基本上,-file read- 逐行读取 SQL 代码,并将结果存储在名为 exec 的本地宏中。然后将该宏作为参数传递给 -odbc load- 命令:
更新了代码以处理一些双引号问题
将以下代码剪切并粘贴到名为 loadsql.ado 的文件中,您应该将其放入 Stata 可以看到的目录中(例如 ~/ado/personal)。您可以使用 -adopath- 命令找到此类目录。
program define loadsql
*! Load the output of an SQL file into Stata, version 1.3 ([email protected])
version 14.1
syntax using/, DSN(string) [User(string) Password(string) CLEAR NOQuote LOWercase SQLshow ALLSTRing DATESTRing]
#delimit;
tempname mysqlfile exec line;
file open `mysqlfile' using `"`using'"', read text;
file read `mysqlfile' `line';
while r(eof)==0 {;
local `exec' `"``exec'' ``line''"';
file read `mysqlfile' `line';
};
file close `mysqlfile';
odbc load, exec(`"``exec''"') dsn(`"`dsn'"') user(`"`user'"') password(`"`password'"') `clear' `noquote' `lowercase' `sqlshow' `allstring' `datestring';
end;
/* 全做完了! */
Stata 中的语法是
loadsql using "./sqlfile.sql", dsn("mysqlodbcdata")
您还可以添加所有其他 odbc 加载选项,例如清除。显然,您需要更改文件路径和 odbc 参数以反映您的设置。此代码应该执行与 -odbc sqlfile("sqlfile.sql"), dsn("mysqlodbcdata")- 相同的操作,并且实际加载数据。
我还添加了指定数据库凭据的功能,如下所示:
loadsql using "./sqlfile.sql", dsn("mysqlodbcdata") user("user_name") password("not12345")