为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
潇潇雨雨 2022-06-17 14:42:40
我想检查 SQL Server 2017 表 $tablename(由用户以 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'.如果我不先检查表是否存在,则创建表没有问题:    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 的表我看到有很多不同的方法可以检查 SQL Server 中是否存在表不幸的是,每次我尝试使用 $tablename 变量来检查表是否存在时,它都会返回错误。我希望有人能帮帮忙。
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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


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);


查看完整回答
反对 回复 2022-06-17
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

这也有效:


    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);


查看完整回答
反对 回复 2022-06-17
  • 2 回答
  • 0 关注
  • 207 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号