mssqlを使用してSQLServerに接続するNodeJSには、「キーワード\ 'user \'の近くに不正な構文があります。」と表示されます。

「キーワード 'user'の近くの構文が正しくありません。」最近、NodeJSのmssqlモジュールを使用してSQLServerデータベースに接続するときにエラーが発生しました。Googleは、ユーザーをSQLServerのインジケーターとして使用していますが、SQLServerのユーザーは予約済みキーワードです。テーブル名や変数名としては使用できません。したがって、解決策は非常に単純です。テーブル名をuserの名前をt_userまたは別の名前に変更するだけです。

SQLServerでテーブル構造ユーザーを定義し、それにデータを追加します

私はWindows 10システムを使用しています。SQLServer2012データベースがローカルシステムにインストールされています。SQLServer Management StudioまたはNavicat Premium 12およびその他のツールを使用してSQLServerデータベースに接続できます。私は、ユーザのテーブルを作成し、USERDBデータベースにNavicatはプレミアム12で作成し、SQLServerデータベースに接続するには、このデータベースNavicatはプレミアム12クライアントツールを使用するために使用される
次のようにそのテーブル構造が定義されている、:
ユーザーテーブルの構造
ユーザーのためのいくつかのテーブルを追加します以下に示すようなレコード:
ユーザーテーブルのデータ
対応するユーザーテーブルの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

mssqlを使用してNodeJSのSQLServerに接続し、UserDBデータベースのユーザーテーブルをクエリする

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データベースの接続プール情報を設定し、次にユーザーテーブルにクエリを実行して、クエリの後に結果を出力します。VSCodeで実行しても、次のエラーは発生しません。表示:
エラーのスクリーンショット
エラーメッセージ「キーワード 'user'の近くに構文が正しくありません。」なので、Gogoleの検索では、多くの人にもこの問題があることがわかりました:
エラーメッセージ
ブログガーデンで[キーワード 'user'の近くに構文が正しくありません。解決策](近くの構文が正しくありませんキーワード「user」。解決策)
ブロガーLangji Tianyaによるこのブログ投稿が見つかりました。理由は次のとおりです。postgresqlでは、sql99およびsql92はすべてuserを予約語として使用します!予約語のため使用できません。
解決策は、テーブル名userをt_userまたは別の名前に変更することです。このエラーは
、https //stackoverflow.comのキーワード「ユーザー」の質問の近くにあるc#不正な構文で詳しく説明されています

Microsoft SQL Serverは、データベースの定義、操作、およびアクセスのために予約済みキーワードを使用します。予約済みキーワードは、SQL ServerがTransact-SQLステートメントとバッチを解析および理解するために使用するTransact-SQL言語の文法の一部です。構文的には可能ですがSQL Serverの予約済みキーワードをTransact-SQLスクリプトの識別子およびオブジェクト名として使用するには、区切り識別子を使用することによってのみこれを実行できます。https://docs.microsoft.com/en-us/sql/t-sql/language
から入手できます。 -elements / reserved-keywords-transact-sql?view = sql-server-2017次の図に示すように、SQLServerデータベースの予約語のリストを
写真1
写真2
参照してください上の図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で実行中のスクリーンショットを以下に示します。
運用実績

参考文献

元の記事131件を公開 38のような 990,000以上を訪問

おすすめ

転載: blog.csdn.net/ccf19881030/article/details/104688626