首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查Server 2017中是否存在$tablename,如果不存在$tablename,则创建表$tablename

检查Server 2017中是否存在$tablename,如果不存在$tablename,则创建表$tablename
EN

Stack Overflow用户
提问于 2019-12-14 13:55:23
回答 2查看 126关注 0票数 0

我想检查一下Server 2017表$tablename (由用户在PHP中输入)是否存在:

代码语言:javascript
复制
    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();
    }

但我总是会犯同样的错误:

代码语言:javascript
复制
SQLSTATE[42S22]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'NNewTable'.

这里也是:

代码语言:javascript
复制
    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);

错误:

代码语言:javascript
复制
SQLSTATE[42S22]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'NewTable'.

如果我不首先检查表是否存在,则创建该表没有问题:

代码语言:javascript
复制
    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的表。

我发现检查Server中是否存在表有很多不同的方法

不幸的是,每次我尝试使用$tablename变量来检查表是否存在时,它都会返回一个错误。我希望有人能帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-14 14:12:28

当用作文字时,将表名用单引号括起来。此外,如果表名可能不符合规则标识符 (例如嵌入式空格),请考虑将该表名称括在方括号(或双引号)中。

代码语言:javascript
复制
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);
票数 2
EN

Stack Overflow用户

发布于 2019-12-14 14:17:51

这也适用于:

代码语言:javascript
复制
    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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59335775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档