检查 SQL Server 2017 中是否存在 $tablename,如果不存在则创建 TABLE $tablename
Check if $tablename exists in SQL Server 2017, CREATE TABLE $tablename if it doesn't exist
我想检查 SQL Server 2017 table $table 名称(由用户以 PHP 形式输入)是否存在:
try {
$dothis = "
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N$tablename)
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )";
$tbl = $pdo->exec($dothis);
} catch(PDOException $e) {
echo "Error: ".$e->getMessage();
}
但我总是得到同样的错误:
SQLSTATE[42S22]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'NNewTable'.
这里也是:
try {
$dothis = "
IF OBJECT_ID ( $tablename, 'U' ) IS NULL
BEGIN
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )
END";
$tbl = $pdo->exec($dothis);
错误:
SQLSTATE[42S22]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'NewTable'.
如果我不首先检查 table 是否存在,创建 table 没有问题:
try {
$dothis = "
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )";
$tbl = $pdo->exec($dothis);
} catch(PDOException $e) {
echo "Error: ".$e->getMessage();
}
没有错误,它创建了名称为 $tablename
的 table
我看到有很多不同的方法可以 check if a table exists in SQL Server
不幸的是,每次我尝试使用 $tablename 变量来检查 table 是否存在时,都会 returns 出错。希望有人能帮忙。
table 名称用作文字时用单引号引起来。此外,如果名称可能不符合 rules for regular identifiers(例如嵌入空格),请考虑将 table 名称括在方括号(或双引号)中。
try {
$dothis = "
IF OBJECT_ID ( N'$tablename', 'U' ) IS NULL
BEGIN
CREATE TABLE [$tablename] ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )
END";
$tbl = $pdo->exec($dothis);
这也有效:
try {
$dothis = "
if not exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = N'$tablename')
BEGIN
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )
END";
$tbl = $pdo->exec($dothis);
我想检查 SQL Server 2017 table $table 名称(由用户以 PHP 形式输入)是否存在:
try {
$dothis = "
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N$tablename)
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )";
$tbl = $pdo->exec($dothis);
} catch(PDOException $e) {
echo "Error: ".$e->getMessage();
}
但我总是得到同样的错误:
SQLSTATE[42S22]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'NNewTable'.
这里也是:
try {
$dothis = "
IF OBJECT_ID ( $tablename, 'U' ) IS NULL
BEGIN
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )
END";
$tbl = $pdo->exec($dothis);
错误:
SQLSTATE[42S22]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'NewTable'.
如果我不首先检查 table 是否存在,创建 table 没有问题:
try {
$dothis = "
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )";
$tbl = $pdo->exec($dothis);
} catch(PDOException $e) {
echo "Error: ".$e->getMessage();
}
没有错误,它创建了名称为 $tablename
的 table我看到有很多不同的方法可以 check if a table exists in SQL Server
不幸的是,每次我尝试使用 $tablename 变量来检查 table 是否存在时,都会 returns 出错。希望有人能帮忙。
table 名称用作文字时用单引号引起来。此外,如果名称可能不符合 rules for regular identifiers(例如嵌入空格),请考虑将 table 名称括在方括号(或双引号)中。
try {
$dothis = "
IF OBJECT_ID ( N'$tablename', 'U' ) IS NULL
BEGIN
CREATE TABLE [$tablename] ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )
END";
$tbl = $pdo->exec($dothis);
这也有效:
try {
$dothis = "
if not exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = N'$tablename')
BEGIN
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )
END";
$tbl = $pdo->exec($dothis);