Sqlserver2016修改列名问题求助
sqlserver吧
全部回复
仅看楼主
level 1
卡撸啦 楼主
现有需求修改表中列名,但是列名中包含[],类似于xxx[xxx]xxx。使用sql语句修改提示语法错误,EXEC sp_rename '表名.列名','新列名','column'。后面发现是因为列名中有[],请问这种情况有办法处理吗?
2023年07月07日 02点07分 1
level 3
对于 SQL Server 2016,由于方括号 "[]" 在系统存储过程 `sp_rename` 中有特殊含义,无法直接在列名中使用方括号。但你可以通过以下方法解决这个问题:
1. 创建一个临时列并将数据复制过去:
- 首先,使用 `ALTER TABLE` 添加一个新的临时列。
- 然后使用 `UPDATE` 语句将原始列的数据复制到临时列。
- 最后,使用 `sp_rename` 将原始列重命名为其他名称,然后将临时列重命名为你想要的列名。
2. 使用动态 SQL:
- 构建一个动态 SQL 查询,将列名作为字符串参数传递给 `sp_rename`。
- 这样可以绕过方括号 "[]" 导致的语法错误。
下面是使用动态 SQL 的示例:
```sql
DECLARE @sql NVARCHAR(MAX);
SET @sql = 'EXEC sp_rename ''表名.[列名]'',''新列名'',''column'';';
EXEC sp_executesql @sql;
```
请将 "表名"、"列名" 和 "新列名" 替换为实际的表名、列名和新列名。
使用动态 SQL 可以绕过方括号的限制,但请注意在构建动态 SQL 语句时要小心防范 SQL 注入攻击。确保在将任何用户输入或动态生成的字符串用于 SQL 查询之前,进行适当的参数化和验证。
2023年07月09日 18点07分 2
level 12
数据不多的情况下(几万条):
先把数据保存成CSV文件
删表
重新建表
CSV数据导入
保存
2023年07月13日 14点07分 3
1