VFP 用 SPT 来发布一条 SELECT 到一个新的 SQL Server 表
为了发布一条 SQL SELECT 语句来创建一个新的 SQL Server 表, SQL Server 数据库的 select into/bulkcopy 选项必须是可用的. 在默认情况下, 对于新创建的 SQL Server 数据库, select into/bulkcopy 选项是不可用的. select into/bulkcopy 选项可以用 sp_dboption 储存过程来修改. 修改 select into/bulkcopy 选项状态的语法是:
sp_dboption 'pubs','select into/bulkcopy','true'
-或者-
sp_dboption 'pubs','select into/bulkcopy','false'
以下代码片断用 SQL Pass Through 来选择 Pubs 中的 Authors 表中的全部记录到一个名为 Mytable 的在 Pubs 数据库中的新表中:
*!* 注意请修改以下代码中的 SERVER= 节以反映你要连接的 SQL Server.
gnConnHandle=SQLSTRINGCONN('DRIVER={SQL Server};SERVER=MY_SERVER;DATABASE=MASTER;' + ;
'UID=sa;PWD=')
IF gnConnHandle>0
*!* 查询来确定是否 SELECT INTO 并且 Fast Bulk Copy 是被允许的
sqlcommand="sp_dboption 'pubs','select into/bulkcopy'"
=sqlexec(gnConnHandle,sqlcommand,'bulkcopy')
sqlcommand="IF EXISTS (SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE " + ;
"table_name = 'mytable') " +CHR(13) + CHR(10) + "DROP TABLE mytable"
=sqlexec(gnConnHandle,sqlcommand)
IF UPPER(ALLTRIM(BULKCOPY.CURRENTSETTING))="OFF"
*!* 在默认情况下 SELECT INTO 和 Fast Bulk Copy 是不允许的.
*!* 在选定数据库中许可 SELECT INTO 和 Fast Bulk Copy
sqlcommand="EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'"
=sqlexec(gnConnHandle,sqlcommand)
ENDIF
*!* 使用 PUBS 数据库
sqlcommand="USE pubs"
=sqlexec(gnConnHandle,sqlcommand)
*!* 发布一条 SQL Select 命令并 SELECT INTO 一个 SQL Server 上的新表
sqlcommand="SELECT * INTO mytable" + CHR(13)+CHR(10) + ;
"FROM authors"
=sqlexec(gnConnHandle,sqlcommand)
*!* 使用 MASTER 数据库
sqlcommand="USE master"
=sqlexec(gnConnHandle,sqlcommand)
IF UPPER(ALLTRIM(BULKCOPY.CURRENTSETTING))="OFF"
*!* 如果 SELECT INTO 和 Fast Bulk Copy 原来是被禁止的,
*!* 重置选定数据库的 SELECT INTO 和 Fast Bulk Copy 到它们的原始状态
sqlcommand="EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false'"
=sqlexec(gnConnHandle,sqlcommand)
ENDIF
*!* Select from 刚创建的表.
sqlcommand="select * from pubs..mytable"
=sqlexec(gnConnHandle,sqlcommand,'mycursor')
=sqldisconn(gnConnHandle)
SELECT mycursor
BROWSE NOWAIT
ENDIF