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()
相关推荐
光影少年4 小时前
Redux Toolkit 用法、解决原生Redux 冗余问题
开发语言·前端·javascript·react.js·中间件·前端框架·ecmascript
云水一下5 小时前
JavaScript 从零基础到精通系列:DOM 操作与事件驱动编程
前端·javascript
零陵上将军_xdr5 小时前
后端转全栈学习-Day3-JavaScript 基础-1
开发语言·javascript·学习
GISHUB5 小时前
Express + TypeScript + ESM 后端服务搭建教程
javascript·typescript·express
土狗TuGou5 小时前
SQL内功笔记 · 第7篇:CTE&临时表&递归
数据库·笔记·后端·sql·mysql
ZC跨境爬虫5 小时前
跟着 MDN 学CSS day_32:(Web字体深度解析与实践指南)
前端·javascript·css·ui·html
sugar__salt5 小时前
JavaScript 数组去重全解:6 种核心方法
javascript
砍材农夫5 小时前
物联网 基于netty核心实战-安全tls
java·开发语言·前端·物联网·安全
SEO_juper5 小时前
JavaScript 渲染:AI 智能体无法读取,直接影响收录
开发语言·前端·javascript·aigc·seo·跨境电商·geo