专栏首页ccf19881030的博客NodeJS使用mssql连接SQLServer出现"Incorrect syntax near the keyword \'user\'."

NodeJS使用mssql连接SQLServer出现"Incorrect syntax near the keyword \'user\'."

最近使用NodeJS的mssql模块连接SQLServer数据库出现了"Incorrect syntax near the keyword ‘user’."的错误,Google了一下发现原来我在SQLServer中使用了user作为表明,但是SQLServer中user是保留的关键字,不能被用于做表名或者变量名。所以解决方案很简单,直接重命名表名user为t_user或者其他的名称就OK了。

在SQLServer中定义表结构user并为其添加数据

我用的是Windows10系统,在本地系统中安装了SQLServer2012数据库,可以使用SQL Server Management Studio或者Navicat Premium 12等工具连接SQLServer数据库。我习惯使用Navicat Premium 12这个数据库客户端工具,连接到SQLServer数据库后,在Navicat Premium 12中创建UserDB数据库,再为其创建一个user表 ,其表结构定义如下图所示:

再为user表添加几条记录,如下图所示:

对应的user表的SQL脚本如下:

/*
Navicat Premium Data Transfer

Source Server         : localhost_SqlServer
Source Server Type    : SQL Server
Source Server Version : 11002100
Source Host           : localhost:1433
Source Catalog        : UserDB
Source Schema         : dbo

Target Server Type    : SQL Server
Target Server Version : 11002100
File Encoding         : 65001

Date: 06/03/2020 07:50:41
*/


-- ----------------------------
-- Table structure for user
-- ----------------------------
IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[user]') AND type IN ('U'))
   DROP TABLE [dbo].[user]
GO

CREATE TABLE [dbo].[user] (
 [name] varchar(255) COLLATE Chinese_PRC_CI_AS  NULL,
 [age] int  NULL,
 [sex] tinyint  NULL
)
GO

ALTER TABLE [dbo].[user] SET (LOCK_ESCALATION = TABLE)
GO


-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO [dbo].[user]  VALUES (N'小明', N'23', N'1')
GO

INSERT INTO [dbo].[user]  VALUES (N'王五', N'21', N'1')
GO

INSERT INTO [dbo].[user]  VALUES (N'小红', N'20', N'0')
GO

INSERT INTO [dbo].[user]  VALUES (N'小丽', N'22', N'0')
GO

配置好NodeJS环境,提前安装好Node和NPM以及VSCode等IDE,然后在VSCode项目目录下的终端中安装mssql模块

mssql模块是NodeJS下的一个用于连接SQLServer数据库的npm模块,其npm地址为:https://www.npmjs.com/package/mssql 安装命令如下:

npm install mssql

在NodeJS中使用mssql连接SQLServer并查询UserDB数据库中的user表

在VSCode中的对应的目录创建一个mssqlTest.js文件,其代码如下:

// mssql模块的简单使用
// https://www.npmjs.com/package/mssql
var sql = require('mssql');

// DB configuration
var dbConfig = {
 user: 'sa',
 password: '1030',
 server: 'localhost',
 database: 'UserDB',
 port: 1433,
 pool: {
     max: 10,
     min: 0,
     idleTimeoutMillis: 30000
 }
};

// 查询所有的用户信息
function getAllUsers() {
 var conn = new sql.ConnectionPool(dbConfig);
 //console.log(conn);
 var req = new sql.Request(conn);
 conn.connect(function (err) {
     if (err) {
         console.log(err);
         return;
     }
     // 查询user表
     req.query("SELECT * FROM user", function (err, recordset) {
         if (err) {
             console.log(err);
             return;
         }
         else {
             console.log(recordset);
         }
         conn.close();
     });
 });
 }
 
// 查询所有的用户信息
getAllUsers();

上面的代码主要是使用mssql模块连接SQLServer数据库,首先设置好SQLServer数据库的连接池信息,再查询user表,并打印查询后的结果,在VSCode中运行没想到出现了下面的错误,截图如下图所示:

报错信息“Incorrect syntax near the keyword ‘user’.”,于是Gogole搜索发现有不少人也出现了此问题:

在博客园[Incorrect syntax near the keyword ‘user’.解决方案](Incorrect syntax near the keyword ‘user’.解决方案)中找到了博主浪迹天涯的这篇博文,原因是: 在postgresql、sql99以及sql92都把user作为保留字了!既然是保留字,就不能用了。 解决方案就是把表名user改成t_user或者其他的名字就OK了。 在https://stackoverflow.com的c# incorrect syntax near the keyword 'user’这篇问题里面对这个错误有详细的描述:

Microsoft SQL Server uses reserved keywords for defining, manipulating, and accessing databases. Reserved keywords are part of the grammar of the Transact-SQL language that is used by SQL Server to parse and understand Transact-SQL statements and batches. Although it is syntactically possible to use SQL Server reserved keywords as identifiers and object names in Transact-SQL scripts, you can do this only by using delimited identifiers. 可以从https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-2017看到SQLServer数据库中的保留字的列表,如下图所示:

从上图2中可以看出USER是SQLServer数据库中的保留字,用户不能使用其作为表明。

在SQLServer数据库UserDB中将表名user修改为t_user,然后在mssqlTest.js代码中相应的修改表名

修改后的mssqlTest.js代码如下:

// mssql模块的简单使用
// https://www.npmjs.com/package/mssql
var sql = require('mssql');

// DB configuration
var dbConfig = {
  user: 'sa',
  password: '1030',
  server: 'localhost',
  database: 'UserDB',
  port: 1433,
  pool: {
      max: 10,
      min: 0,
      idleTimeoutMillis: 30000
  }
};

// 查询所有的用户信息
function getAllUsers() {
  var conn = new sql.ConnectionPool(dbConfig);
  //console.log(conn);
  var req = new sql.Request(conn);
  conn.connect(function (err) {
      if (err) {
          console.log(err);
          return;
      }
      // 查询t_user表
      req.query("SELECT * FROM t_user", function (err, recordset) {
          if (err) {
              console.log(err);
              return;
          }
          else {
              console.log(recordset);
          }
          conn.close();
      });
  });
  }
  
// 查询所有的用户信息
getAllUsers();

在VSCode中运行截图如下所所示:

参考资料

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • NodeJS中使用mssql模块连接SQLServer数据库

    最近看了下NodeJS下连接SQLServer的一些示例,发现NodeJs中有两个模块,一个是mssql,其npm地址是:https://www.npmjs.c...

    ccf19881030
  • Node.js-具有示例API的基于角色的授权教程

    1.从https://github.com/cornflourblue/node-role-based-authorization-api下载或克隆教程项目代码...

    ccf19881030
  • Ubuntu12.04下使用doxygen生成API文档

    前段时间公司里做项目要求遵循doxygen文档规范,并且在Windows XP下安装了Doxygen 1.8.4版本,使用起来能查看头文件是否遵循doxyge...

    ccf19881030
  • 基于jsp+servlet图书管理系统之后台用户信息修改操作

    上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的是修改操作,附有从头至尾写的代码(详细的注释)和数据库!  此次修改操作的源码和数据库:http:...

    别先生
  • 如何优雅地实现分页查询

    分页功能是很常见的功能,特别是当数据量越来越大的时候,分页查询是必不可少的。实现分页功能有很多种方式,如果使用的ORM框架是mybatis的话,有开源的分页插件...

    黄泽杰
  • ThinkPHP6.0学习笔记-模型操作

    模型的数据字段和对应的数据表字段是对应的,默认会自动获取(以及类型),自动获取的过程会加一次查询操作(浪费资源),thinkphp支持自定义字段信息。

    Mirror王宇阳
  • SpringMVC response返回参数绑定

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    多凡
  • python flask web 博客实例 登录模块 1

    flask-login werkzeug itsdangerous flask-mail flask-bootstrap flask-wtf

    用户5760343
  • Java Web之SpringMVC 进行数据回显

    基本介绍 数据回显:模型数据导向视图(模型数据 ---> Controller ---> 视图) 说明:SpringMVC在调用方法前会创建一个隐含的模型对象...

    YungFan
  • Yii框架实现对数据库的CURD操作示例

    本文实例讲述了Yii框架实现对数据库的CURD操作。分享给大家供大家参考,具体如下:

    砸漏

扫码关注云+社区

领取腾讯云代金券