nodejs动态创建sql server表
安装库
链接sql server
npm i mssql
封装请求函数
query_sql.js
const sql = require('mssql')const pool = new sql.ConnectionPool({user: 'aa',password: '*******',server: '127.0.0.1',database: 'BB',port: 1433,options: {encrypt: false},pool: {min: 0,max: 10,idleTimeoutMillis: 10000}
})const querySql = (sql) => {return new Promise(async (resolve, reject) => {try {await pool.connect()const result = await pool.request().query(sql)resolve(result.recordset)} catch (err) {reject(err)} finally {pool.close()}})
}module.exports = querySql
动态创建方法
create_sql_table.js
const querySql = require('./query_sql')const createTable = (table_name, field_list) => {// 输入校验if (typeof table_name !== 'string' || table_name.trim() === '') {throw new Error('Invalid table name: must be a non-empty string')}if (!Array.isArray(field_list)) {throw new Error('Invalid field list: must be an array')}// 校验并生成字段定义if (field_list.length === 0) {throw new Error('Field list cannot be empty')}const field_list_column = field_list.map((item) => {return `${item.name} ${item.type ? item.type : 'VARCHAR(255)'}${item.is_key ? ' PRIMARY KEY' : ''} ${item.nullable ? 'NOT NULL' : ''}`}).join(', ')const field_list_text = field_list.map((item) => {return `EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'${item.text}',@level0type = N'SCHEMA', @level0name = 'dbo',@level1type = N'TABLE', @level1name = '${table_name}',@level2type = N'COLUMN', @level2name = '${item.name}';`}).join('\n')return `IF NOT EXISTS (SELECT * FROM sys.tables WHERE object_id = OBJECT_ID(N'[dbo].[${table_name}]') AND type in (N'U'))BEGINCREATE TABLE ${table_name} (${field_list_column})END${field_list_text}`
}const createdYSsubcontractorder = async () => {const table_name = 'test_table'const table_list = [{ name: 'id', text: '唯一值', is_key: true },{ name: 'state', text: '状态:0-已审批,1-驳回' },{ name: 'editDate', text: '修改日期' },{ name: 'createTime', text: '创建时间' }]try {const sql = createTable(table_name, table_list)console.log(sql)await querySql(sql)console.log('表和注释已成功创建')} catch (err) {console.error('操作失败:', err)}
}createdYSsubcontractorder()