我正在尝试创建数据库和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
答案 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");