「キーワード '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データベースの予約語のリストを
参照してください:上の図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で実行中のスクリーンショットを以下に示します。
参考文献
- [キーワード 'user'の近くの不正な構文。解決策](キーワード 'user'の近くの不正な構文。解決策)
- キーワード「ユーザー」の近くの不正な構文
- キーワード「user」の近くのc#の誤った構文
- SQLServer予約済みキーワード(Transact-SQL)