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()
相关推荐
品尚公益团队15 分钟前
C#在asp.net网页开发中的带cookie登录实现
前端·c#·asp.net
多加点辣也没关系1 小时前
JavaScript|第9章:对象 — 基础
开发语言·javascript·ecmascript
没有了遇见1 小时前
AI Agent 是什么?—— 一文理解 LLM、Memory、Skills、Tools、MCP、Workflow,Context
android·前端·程序员
后台开发者Ethan2 小时前
setState组件更新
前端·javascript·react
谙忆10242 小时前
大文件上传实战:前端分片、断点续传、秒传与并发控制怎么落地
前端
轻动琴弦2 小时前
VoltTool —— 一站式在线开发者工具平台,69+实用工具免费使用
前端·chrome
就叫飞六吧2 小时前
不同站点iframe嵌套种cookie、localstorege.set() 关系
前端
星栈2 小时前
LiveView 怎么测:从组件测试到端到端,我终于不再只敢手点页面了
前端·前端框架·elixir
蜡台2 小时前
uniapp vue2 转 vue3
前端·javascript·uni-app·vue3·vue2
Web4Browser2 小时前
Headless 浏览器自动化适合哪些任务?巡检、截图和提交动作要分级
运维·前端·自动化