在perl脚本中如何使用'use'和'GO'sql语句?我有一个perl脚本但我得到语法错误

时间:2014-05-29 06:54:16

标签: perl

我正在尝试创建数据库和USE语句,然后在同一个数据库中创建一个表。

#!/usr/bin/perl
use DBI; 
my $host = 'idcqeam726.amdom281.lab'; 
my $database = 'master'; 
my $user = 'sa'; 
my $auth = 'Control123'; 
# DBD::ADO 
$dsn = "Provider=sqloledb;Trusted Connection=yes;"; 
$dsn .= "Server=$host;Database=$database"; 
my $dbh = DBI->connect("dbi:ADO:$dsn",  $user,  $auth,  { RaiseError => 1, AutoCommit => 1}) || die "Database connection not made: $DBI::errstr";
$dbh->do("CREATE DATABASE [LowBCHR] ");
$dbh->do("ALTER DATABASE [LowBCHR] SET RECOVERY SIMPLE ");
$dbh->do("USE LowBCHR;
CREATE TABLE TestTable(RowID BIGINT IDENTITY PRIMARY KEY ,JoinVal BIGINT DEFAULT ( 0 ) NOT NULL ,DateChange DATETIME2 DEFAULT ( CURRENT_TIMESTAMP ) NOT NULL ,DataCol NCHAR ( 500 ) DEFAULT ( 'BCHR' ));
qq{BEGIN TRANSACTION DECLARE \@i INT = 1 WHILE \@i <= 30000 BEGIN INSERT INTO TestTable ( JoinVal )VALUES ( \@i % 10 )SET \@i = \@i + 1 END};");

我收到的错误如下:

DBD::ADO::db do failed: Can't Execute 'USE LowBCHR;
Description : Syntax error or access violation

1 个答案:

答案 0 :(得分:2)

而不是使用,只需将数据库名称添加到SQL语句dbname.tablename(我相信你在那里做了两个命令,所以检查解析):

$dbh->do("CREATE TABLE LowBCHR.TestTable(RowID BIGINT IDENTITY PRIMARY
    KEY ,JoinVal BIGINT DEFAULT ( 0 ) NOT NULL ,DateChange DATETIME2
    DEFAULT ( CURRENT_TIMESTAMP ) NOT NULL ,DataCol NCHAR ( 500 ) DEFAULT
   ( 'BCHR' )");

$dbh->do("BEGIN TRANSACTION DECLARE \@i INT = 1 WHILE \@i <= 30000
    BEGIN INSERT INTO LowBCHR.TestTable ( JoinVal )VALUES ( \@i % 10 )SET
    \@i = \@i + 1 END");