HaniBlindBox/server/scripts/sql_exec.js
2026-01-02 15:46:56 +08:00

74 lines
1.9 KiB
JavaScript

/**
* SQL Server 通用执行脚本
* 用法: node sql_exec.js "你的SQL语句"
* 或者: node sql_exec.js -f sql文件路径
*/
const sql = require('mssql');
const fs = require('fs');
const config = {
server: '192.168.195.15',
port: 1433,
user: 'sa',
password: 'Dbt@com@123',
database: 'honey_box',
options: {
encrypt: false,
trustServerCertificate: true
}
};
async function executeSQL(query) {
let pool = null;
try {
pool = await sql.connect(config);
console.log('✅ 连接成功\n');
const result = await pool.request().query(query);
// 显示结果
if (result.recordset && result.recordset.length > 0) {
console.log(`返回 ${result.recordset.length} 条记录:\n`);
console.table(result.recordset);
} else if (result.rowsAffected) {
console.log(`✅ 执行成功,影响行数: ${result.rowsAffected.join(', ')}`);
} else {
console.log('✅ 执行成功');
}
return result;
} catch (err) {
console.error('❌ 执行失败:', err.message);
throw err;
} finally {
if (pool) await pool.close();
}
}
async function main() {
const args = process.argv.slice(2);
if (args.length === 0) {
console.log('用法:');
console.log(' node sql_exec.js "SELECT * FROM users"');
console.log(' node sql_exec.js -f script.sql');
process.exit(1);
}
let query;
if (args[0] === '-f' && args[1]) {
// 从文件读取SQL
query = fs.readFileSync(args[1], 'utf8');
console.log(`执行文件: ${args[1]}\n`);
} else {
// 直接执行SQL
query = args.join(' ');
}
console.log('SQL:', query.substring(0, 200) + (query.length > 200 ? '...' : ''), '\n');
await executeSQL(query);
}
main();