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()
相关推荐
炫饭第一名2 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
阿里云大数据AI技术2 小时前
用 SQL 调大模型?Hologres + 百炼,让数据开发直接“对话”AI
sql·llm
王晓枫2 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊2 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter2 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折3 小时前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_3 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
Angelial3 小时前
Vue3 嵌套路由 KeepAlive:动态缓存与反向配置方案
前端·vue.js
jiayu3 小时前
Angular学习笔记24:Angular 响应式表单 FormArray 与 FormGroup 相互嵌套
前端
jiayu3 小时前
Angular6学习笔记13:HTTP(3)
前端