/** * 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();