繁体   English   中英

SQL 服务器的 ODBC 驱动程序 17 附近有错误的语法。 ''

[英]ODBC Driver 17 for SQL Server incorrect syntax near . ''

我正在尝试使用 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][ODBC Driver 17对于 SQL 服务器][SQL Server]'' 附近的语法不正确。[消息] => [Microsoft][用于 SQL 服务器的 ODBC 驱动程序 17][SQL Server]'' 附近的语法不正确。))

如果我在创建查询中删除 $mid,我会收到以下错误

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

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

我认为您正在尝试:

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 进行过滤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM