sqlfile 不加载任何数据。它只是执行(并在指定大声选项时显示结果),而不将任何数据加载到 Stata。这有点违反直觉,但确实如此。odbc 命令的 pdf/dead tree 手册条目中有些不透明地解释了原因。
这是一个更有帮助的答案。假设您有名为 sqlcode.sql 的 SQL 文件。你可以在Stata中打开它(只要不是太长,太长取决于你的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 (dvmaster@gmail.com)
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 加载选项,例如 clear。显然,您需要更改文件路径和 odbc 参数以反映您的设置。这段代码应该和 -odbc sqlfile("sqlfile.sql"), dsn("mysqlodbcdata") 做同样的事情——加上实际加载数据。
我还添加了指定数据库凭据的功能,如下所示:
loadsql using "./sqlfile.sql", dsn("mysqlodbcdata") user("user_name") password("not12345")