【问题标题】:ODBC Driver 17 for SQL Server incorrect syntax near . ''ODBC Driver 17 for SQL Server 附近的语法不正确。 ''
【发布时间】:2019-10-12 05:38:40
【问题描述】:

我正在尝试使用 php 在 MS SQL 服务器管理 17 中创建表。

我的查询是:

                            $mid=$row['MASTER_ID'];
                            echo $mid;
                            $table_solution="CREATE TABLE Q_MASTERID_'$mid'_Solution(
                                            MASTER_ID INT ,  
                                            PRODUCT_NAME varchar(255),
                                            CUSTOMER_NAME varchar(255),
                                            Q_TEMP_ID INT IDENTITY(1,1),
                                            Q_DESC nvarchar(600) NULL,
                                            Q_CATEGORY nvarchar(255)  NULL,
                                            Q_SUB_CATEGORY nvarchar(255) NULL,
                                            SCOPE nvarchar(255) NULL 
                                            ) ON PRIMARY"; 

                            $solution_alter="ALTER TABLE Q_MASTERID_'$mid'_Solution ADD Q_ID AS CONCAT ('A',CAST(Q_TEMP_ID AS VARCHAR(100)))PERSISTED" ;

                             $res=sqlsrv_query($con,$table_solution) or die("Couldn't execute create query".print_r(sqlsrv_errors(), true));
                            $res1=sqlsrv_query($con,$solution_alter) or die("Couldn't execute alter query");

我收到以下错误:

无法执行 create queryArray ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ SQL Server 的 ODBC 驱动程序 17][SQL Server]'' 附近的语法不正确。[消息] => [Microsoft][SQL Server 的 ODBC 驱动程序 17][SQL Server]'' 附近的语法不正确。))

如果我在创建查询中删除 $mid,则会出现以下错误

无法执行 create queryArray ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 156 [code] => 156 [2] => [Microsoft][ ODBC Driver 17 for SQL Server][SQL Server]关键字'PRIMARY'附近的语法不正确。[消息] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]关键字'PRIMARY'附近的语法不正确。) )

我想在创建表“CREATE TABLE Q_MASTERID_'$mid'_Solution”时添加名为 $mid 的动态变量 帮我解决这个问题...

【问题讨论】:

    标签: php sql sql-server odbc


    【解决方案1】:

    我认为您正在尝试:

    CREATE TABLE Q_MASTERID_Solution (
        MASTER_ID INT ,  
        PRODUCT_NAME varchar(255),
        CUSTOMER_NAME varchar(255),
        Q_TEMP_ID INT IDENTITY(1,1),
        Q_DESC nvarchar(600) NULL,
        Q_CATEGORY nvarchar(255)  NULL,
        Q_SUB_CATEGORY nvarchar(255) NULL,
        COPE nvarchar(255) NULL ,
        Q_ID AS ( CONCAT('A', CAST(Q_TEMP_ID AS VARCHAR(100))) ) PERSISTED
    ) ON "default"
    

    我认为没有理由包含ON "default",因为如果没有指定,那是默认的分区方案。如果您确实指定了一个,那么您需要指定一个现有的。

    您可以在名称中包含q_id 的定义。

    创建具有相同架构的多个表是一种非常糟糕的做法。而是将MASTER_ID 作为表中的一列并过滤每个主ID。

    【讨论】:

    • $mid=$row['MASTER_ID']; $table_solution="CREATE TABLE Q_MASTERID_'$mid'_Solution 这是我的问题是我想创建动态表,该表的值来自 $mid 变量。
    • @anupriya 。 . .不要这样做。将行添加到现有表并在完成后将其删除。
    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多