SQL Server新增列放在前面

本文介绍了一个SQL存储过程,用于在指定位置动态地向现有表中添加新列,并确保列顺序正确。提供了详细的步骤和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create   proc   addcolumn  
  @tablename   varchar(30),     --表名  
  @colname   varchar(30),         --要加的列名  
  @coltype   varchar(100),       --要加的列类型  
  @colid   int                               --加到第几列  
  as  
   
  declare   @colid_max   int          
  declare   @sql   varchar(1000)   --动态sql语句  
  --------------------------------------------------  
  if   not   exists(select     1   from   sysobjects    
                              where   name   =   @tablename   and   xtype   =   'u')  
      begin  
      raiserror   20001   '没有这个表'  
      return   -1  
      end  
  --------------------------------------------------  
  if   exists(select   1   from   syscolumns  
                      where   id   =   object_id(@tablename)   and   name   =   @colname)  
      begin  
      raiserror   20002   '这个表已经有这个列了!'  
      return   -1  
      end  
  --------------------------------------------------  
  --保证该表的colid是连续的  
  select   @colid_max   =   max(colid)   from   syscolumns   where   id=object_id(@tablename)  
   
  if   @colid   >   @colid_max   or   @colid   <   1    
        set   @colid   =   @colid   +   1  
  --------------------------------------------------  
  set   @sql   =   'alter   table   '+@tablename+'   add   '+@colname+'   '+@coltype    
  exec(@sql)  
   
  select   @colid_max   =   colid    
  from   syscolumns   where   id   =   object_id(@tablename)   and   name   =   @colname  
  if   @@rowcount   <>   1  
      begin  
      raiserror   20003   '加一个新列不成功,请检查你的列类型是否正确'  
      return   -1  
      end  
  --------------------------------------------------  
  --打开修改系统表的开关  
  EXEC   sp_configure   'allow   updates',1     RECONFIGURE   WITH   OVERRIDE  
   
  --将新列列号暂置为-1  
  set   @sql   =   'update   syscolumns  
                          set   colid   =   -1  
                          where   id   =   object_id('''+@tablename+''')    
                                      and   colid   =   '+cast(@colid_max   as   varchar(10))  
  exec(@sql)  
   
  --将其他列的列号加1  
  set   @sql   =   'update   syscolumns  
                          set   colid   =   colid   +   1  
                          where   id   =   object_id('''+@tablename+''')    
                                      and   colid   >=   '+cast(@colid   as   varchar(10))  
  exec(@sql)  
   
  --将新列列号复位  
  set   @sql   =   'update   syscolumns  
                          set   colid   =   '+cast(@colid   as   varchar(10))+'  
                          where   id   =   object_id('''+@tablename+''')    
                                      and   name   =   '''+@colname   +''''  
  exec(@sql)  
  --------------------------------------------------  
  --关闭修改系统表的开关  
  EXEC   sp_configure   'allow   updates',0     RECONFIGURE   WITH   OVERRIDE  
  go  
   
   
  调用方法:  
  exec   addcolumn   '表名','新列名','新列类型',加到第几个位置  
  如:  
  exec   addcolumn   'test','id2','char(10)',2  
  表示将id2这个列加到表test的第二个位置,类型是char(10)。

exec   addcolumn   'test','id2','int   not   null   identity(1,1)   primary   key',2   
 

### SQL Server 远程连接错误 40 Named Pipes Provider 的解决方案 当遇到 `Named Pipes Provider, error: 40` 错误时,通常是因为以下几个原因导致的: #### 1. **SQL Server 实例名称不正确** 如果指定的 SQL Server 实例名称有误,则客户端无法定位到目标服务器。可以通过以下方式确认实例名称是否正确: - 使用命令行工具查询本地安装的所有 SQL Server 实例名: ```cmd sqllocaldb info ``` 这会返回当前机器上所有的 SQL Server 实例表[^1]。 #### 2. **SQL Server 是否允许远程连接** 默认情况下,某些版本的 SQL Server 不允许远程连接。需要通过以下步骤启用此功能: - 打开 SQL Server Management Studio (SSMS),右键点击服务器节点并选择“属性”。 - 切换到“连接”选项卡,勾选“允许远程连接到此服务器”。 此外,还需要确保 TCP/IP 协议已启用: - 在 SSMS 中依次导航至【对象资源管理器】 -> 【SQL Server Network Configuration】 -> 【Protocols for MSSQLSERVER】。 - 右击 “TCP/IP”,将其状态更改为“Enabled”。随后重启 SQL Server 服务以应用更改。 #### 3. **防火墙设置阻止了端口通信** 即使上述配置都已完成,但如果操作系统或云平台上的防火墙未放通必要的端口号(通常是 1433,默认用于 SQL Server 数据库引擎监听),仍然会出现连接失败的情况。对于部署在云端的服务而言,比如阿里云 ECS 实例,需特别注意其安全组策略中的入方向规则是否有针对该端口开放流量许可。具体操作如下: - 登录到对应的云计算服务平台控制台; - 定位到虚拟机所属的安全组页面; - 新增一条授权规则,协议类型设为 TCP ,端口范围填写成 1433 或者自定义实际使用的其他非标准端口数值; 另外值得注意的是,如果是新增加了一个新的安全组规则集的话,可能需要重新启动一下服务器才能让改动生效[^1]。 #### 4. **SQL Server 服务未能正常启动** 有时尽管完成了前面提到的各项调整措施之后依旧存在同样的问题,这时候应该检查下 SQL Server 自身的服务状况。假如发现它的运行状态并不是处于活动当中,那么就很有必要深入探究背后的原因了。例如之前提及过的由于某种未知因素致使服务崩溃或者根本就没有成功初始化起来等问题都会引发类似的症状表现出来即所谓的 'error code 17051' 。此时可以参照官方文档或者其他社区分享的经验去排查具体的故障源头所在位置,并采取相应的修复手段来恢复正常的运作环境条件下去解决问题根源之处[^2]。 综上所述,要彻底消除此类现象的发生概率就需要综合考虑以上几个方面的可能性逐一排除直至最终达到预期效果为止才行! ```python # Python 示例代码片段展示如何利用 pyodbc 库建立与远端 MS SQL DB 的链接测试情况下的基本语法结构形式作为参考用途而已并非直接关联本文主题讨论范畴之内部分的内容说明解释作用罢了无需太过纠结于此细节方面的东西啦朋友们😊 import pyodbc server = 'your_server_name_or_ip_address' database = 'test_db' username = 'sa_user' password = 'secure_password' try: conn_str = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={server};DATABASE={database};UID={username};PWD={password}' connection = pyodbc.connect(conn_str) except Exception as e: print(f"Connection failed with the following exception:\n {e}") finally: if 'connection' in locals(): connection.close() ``` 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值