nodejs动态创建sql server表

安装库

链接sql server

bash 复制代码
npm i mssql

封装请求函数

query_sql.js

javascript 复制代码
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

javascript 复制代码
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'))
    BEGIN
      CREATE 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()
相关推荐
JIngJaneIL4 分钟前
篮球论坛|基于SprinBoot+vue的篮球论坛系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·篮球论坛系统
程序猿阿伟2 小时前
《首屏加载优化手册:Vue3+Element Plus项目提速的技术细节》
前端·javascript·vue.js
尘觉2 小时前
面试-浅复制和深复制?怎样实现深复制详细解答
javascript·面试·职场和发展
fruge3 小时前
Vue Pinia 状态管理实战指南
前端·vue.js·ubuntu
sean4 小时前
开发一个自己的 claude code
前端·后端·ai编程
用户21411832636024 小时前
dify案例分享-用 Dify 一键生成教学动画 HTML!AI 助力,3 分钟搞定专业级课件
前端
数字化顾问4 小时前
SQL之键与约束实战进阶——从基础语法到高并发场景优化
sql
chxii4 小时前
ISO 8601日期时间标准及其在JavaScript、SQLite与MySQL中的应用解析
开发语言·javascript·数据库
没逛够4 小时前
Vue 自适应高度表格
javascript·vue.js·elementui
太过平凡的小蚂蚁6 小时前
Kotlin 协程中常见的异步返回与控制方式(速览)
开发语言·前端·kotlin