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()
相关推荐
2401_894915531 分钟前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
rockey6274 小时前
C#脚本引擎之AScript与Jurassic、Jint对比
javascript·c#·.net·js·script·动态脚本
Profile排查笔记5 小时前
指纹浏览器哪个好?从 Profile、代理、权限和自动化能力判断是否适合
前端·人工智能·后端·自动化
lzhdim6 小时前
12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
denggun123456 小时前
yield
前端·数据库·python
前端snow6 小时前
ai agent -- prompt汇总
前端
muddjsv7 小时前
前端性能优化实战:从加载到渲染的全面提速指南
前端·性能优化
deli0070078 小时前
JSON 树形查看器:粘贴即解析,折叠展开一目了然
前端·数据库·json·ai编程
guanguan0_08 小时前
PageProxy:页面维度接口地图 + 一键场景切换
前端·ai编程·请求代理·proxy工具
好好学习的星熊8 小时前
SQL 面试题(数据分析师)
sql·mysql