sql 修改表以及表字段

 

用SQL语句添加删除修改字段
1.增加字段
     alter table docdsp    add dspcode char(200)
     alter table tbl add meet_group int2

2.删除字段
     ALTER TABLE table_NAME DROP COLUMN column_NAME
3.修改字段类型
     ALTER TABLE table_name    ALTER COLUMN column_name new_data_type
4.sp_rename 改名
     更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
    语法
    sp_rename [ @objname = ] 'object_name' ,
        [ @newname = ] 'new_name'
        [ , [ @objtype = ] 'object_type' ]
        如:EXEC sp_rename    'newname','PartStock'
5.sp_help 显示表的一些基本情况
     sp_help 'object_name'     如:EXEC sp_help    'PartStock'
6.判断某一表PartStock中字段PartVelocity是否存在
if     exists     (select     *     from     syscolumns     where     id=object_id('PartStock')     and     name='PartVelocity')  
print     'PartVelocity exists'
else print 'PartVelocity not exists'
另法:
判断表的存在性:
    select count(*) from sysobjects where type='U' and name='你的表名'
判断字段的存在性:
    select count(*) from syscolumns
    where id     = (select id from sysobjects where type='U' and name='你的表名')
    and     name = '你要判断的字段名'
  
一个小例子
--假设要处理的表名为: tb
--判断要添加列的表中是否有主键
if exists(select 1 from sysobjects where parent_obj=object_id('tb') and xtype='PK')
begin
print '表中已经有主键,列只能做为普通列添加'
--添加int类型的列,默认值为0
alter table tb add 列名 int default 0  
end
else
begin
print '表中无主键,添加主键列'
--添加int类型的列,默认值为0
alter table tb add 列名 int primary key default 0  
end

7.随机读取若干条记录
      Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
      Sql server:select top n * from 表名 order by newid()
      mysql select * From 表名 Order By rand() Limit n
8.说明:日程安排提前五分钟提醒
      SQL: select * from 日程安排 where datediff(minute,f开始时间,getdate())>5

9.前10条记录
      select top 10 * form table1 where 范围

10.包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
      (select a from tableA ) except (select a from tableB) except (select a from tableC)

11.说明:随机取出10条数据
      select top 10 * from tablename order by newid()

12.列出数据库里所有的表名
      select name from sysobjects where type=U
13.列出表里的所有的字段名
      select name from syscolumns where id=object_id(TableName)
14.说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
      select type,sum(case vender when A then pcs else 0 end),sum(case vender when C then pcs else 0 end),sum(case vender when B then pcs else 0 end) FROM tablename group by type
15.说明:初始化表table1
      TRUNCATE TABLE table1
16.说明:几个高级查询运算词
  A: UNION 运算符
  UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

  B: EXCEPT 运算符
  EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

  C: INTERSECT 运算符
  INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
  注:使用运算词的几个查询结果行必须是一致的。


17.说明:在线视图查询(表名1:a )
      select * from (SELECT a,b,c FROM a) T where t.a > 1;

18.说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
      select * from table1 where time between time1 and time2
      select a,b,c, from table1 where a not between 数值1 and 数值2

19.说明:in 的使用方法
      select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

20.说明:两张关联表,删除主表中已经在副表中没有的信息
      delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
21. 说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
  法一:select * into b from a where 1<>1
  法二:select top 0 * into b from a

22.说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
      insert into b(a, b, c) select d,e,f from b;

23.说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
      insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
  例子:..from b in "&Server.MapPath(".")&"/data.mdb" &" where..
24.创建数据库
      CREATE DATABASE database-name

25.说明:删除数据库
      drop database dbname
26.说明:备份sql server
  --- 创建 备份数据的 device
      USE master
      EXEC sp_addumpdevice disk, testBack, c:/mssql7backup/MyNwind_1.dat

  --- 开始 备份
      BACKUP DATABASE pubs TO testBack

27.说明:创建新表
      create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
  根据已有的表创建新表:
      A:create table tab_new like tab_old (使用旧表创建新表)
      B:create table tab_new as select col1,col2… from tab_old definition only

28.说明:
  删除新表:drop table tabname

29.说明:
  增加一个列:Alter table tabname add column col type
  注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

30.说明:
  添加主键:Alter table tabname add primary key(col)
  说明:
  删除主键:Alter table tabname drop primary key(col)

31.说明:
  创建索引:create [unique] index idxname on tabname(col….)
  删除索引:drop index idxname
  注:索引是不可更改的,想更改必须删除重新建。

32.说明:
  创建视图:create view viewname as select statement
  删除视图:drop view viewname

33.说明:几个简单的基本的sql语句
  选择:select * from table1 where 范围
  插入:insert into table1(field1,field2) values(value1,value2)
  删除:delete from table1 where 范围
  更新:update table1 set field1=value1 where 范围
  查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
  排序:select * from table1 order by field1,field2 [desc]
  总数:select count * as totalcount from table1
  求和:select sum(field1) as sumvalue from table1
  平均:select avg(field1) as avgvalue from table1
  最大:select max(field1) as maxvalue from table1
  最小:select min(field1) as minvalue from table1

<think>首先,用户的问题是:“我想查找在SQL Server修改表字段的方法,请问SQL Server修改表字段的方法”。用户引用了几个来源,我需要基于这些引用提供准确的回答。 回顾系统指令: - 所有行内数学达式使用 `$...$` 格式(但这里可能不涉及数学,所以忽略)。 - 独立公式使用 `$$...$$`,但同样不相关。 - LaTeX 语法正确(可能不适用)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识,如 [^1]。 - 回答结构清晰,逐步解决问题,保证真实可靠。 用户提供的引用: - [^1]: 描述在 SQL Server Management Studio (SSMS) 中通过设置禁用“阻止保存要求重新创建更改”选项来允许修改字段属性。 - [^2]: 详细描述了修改字段类型时 SQL Server 内部如何操作:创建新、导入数据、删除旧、重命名新。 - [^3]: 关于如何添加字段注释使用 `sp_addextendedproperty`。 - [^4]: 关于获取、添加、修改、删除字段描述的 SQL 语句。 - [^5]: 批量修改数据库表字段类型的部分 SQL 语句。 用户的核心需求是“修改表字段的方法”,可能包括更改字段类型、长度、添加注释等。引用中覆盖了多个方面。 结构化回答: 1. **介绍问题**:简要解释 SQL Server 修改字段的常见问题和解决方法。 2. **方法一:使用 SSMS GUI**:基于 ,描述如何通过工具选项禁用保存限制。 3. **方法二:使用 T-SQL**:基于 [^2],解释直接使用 SQL 命令修改字段类型。 4. **添加或修改字段注释**:基于 和 ,说明如何使用存储过程添加描述。 5. **批量修改**:基于 [^5],简要提及批量操作。 6. **注意事项**:提醒潜在风险和最佳实践。 7. **生成相关问题**:在结尾添加相关问题。 确保引用正确:在回答中,当引用具体信息时,添加 [^n] 标识。 最终输出格式: - 回答部分。 - §§相关问题§§ - 相关问题列。 用中文回答。 逐步构建回答: 1. **开头**:直接回答用户问题。 2. **方法详细说明**: - GUI 方法:引用 [^1]。 - T-SQL 方法:引用 [^2]。 - 注释修改:引用 和 。 - 批量修改:引用 。 3. **结束**:总结建议。 4. **相关问题**:生成 2-3 个相关问题。 相关问题示例: - 如何安全修改 SQL Server 结构? - SQL Server 中如何添加字段注释? - 批量修改字段类型有什么风险? </think> ### SQL Server 修改表字段的方法 在 SQL Server修改表字段(如更改字段类型、长度或添加注释)是常见的数据库管理操作。SQL Server 默认设置可能会限制直接修改(例如,更改字段类型可能需要重建),但可以通过图形界面(SSMS)或 T-SQL 命令实现。以下是基于您的引用内容的详细方法总结,我将逐步解释操作步骤和注意事项,确保真实可靠。 #### 1. **使用 SQL Server Management Studio (SSMS) 图形界面修改字段** SQL Server Management Studio (SSMS) 提供直观的图形界面修改结构,但默认设置可能阻止某些更改(如修改字段类型)。通过调整 SSMS 选项可解决: - **操作步骤**: 1. 打开 SSMS,连接到目标数据库。 2. 导航到 "工具" → "选项" → "设计器" → "设计器和数据库设计器"。 3. 取消勾选 "阻止保存要求重新创建更改" 选项。 4. 点击 "确定" 保存设置[^1]。 - **示例修改**: - 在对象资源管理器中,右键单击目标 → 选择 "设计"。 - 修改字段属性(如将 `nvarchar(50)` 改为 `nvarchar(100)`)。 - 保存更改时,SSMS 会自动处理重建(无需手动执行)。 - **优点**: 简单易用,适合初学者。 - **注意事项**: 此操作仅禁用 SSMS 的保存限制,不影响数据库引擎行为;修改时可能引起短暂锁。 #### 2. **使用 T-SQL 命令直接修改字段** 对于复杂修改或自动化脚本,T-SQL 更灵活。SQL Server 内部通过重建实现字段修改(如更改类型或长度): - **基本语法** (修改字段类型): ```sql -- 示例:将 T1 的字段 c1 从 nvarchar(50) 改为 nvarchar(100) ALTER TABLE dbo.T1 ALTER COLUMN c1 nvarchar(100) NOT NULL; ``` - 如果直接 `ALTER COLUMN` 失败(例如涉及数据截断),SQL Server 会隐式执行以下步骤: 1. 创建新 `Tmp_T1` 并定义新字段类型。 2. 锁定新并导入旧数据(使用 `WITH (HOLDLOCK TABLOCKX)` 确保数据一致性)。 3. 删除旧并将新重命名为原名。 ```sql CREATE TABLE dbo.Tmp_T1 (c1 nvarchar(100) NULL); ALTER TABLE dbo.Tmp_T1 SET (LOCK_ESCALATION = TABLE); INSERT INTO dbo.Tmp_T1 (c1) SELECT c1 FROM dbo.T1 WITH (HOLDLOCK TABLOCKX); DROP TABLE dbo.T1; EXECUTE sp_rename N'dbo.Tmp_T1', N'T1', 'OBJECT'; ``` - **优点**: 适用于脚本化部署或批量操作;可控制锁机制减少业务中断。 - **注意事项**: - 修改字段类型时,需确保新类型兼容旧数据(如 `int` 改为 `varchar` 可能导致错误)。 - 大操作可能耗时较长,建议在低峰期执行。 #### 3. **添加或修改字段注释** 字段注释(描述)可通过 `sp_addextendedproperty` 存储过程管理: - **添加注释**: ```sql -- 示例:为 MyTable字段 MyColumn 添加注释 EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'这是MyColumn字段的描述', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'MyTable', @level2type = N'COLUMN', @level2name = N'MyColumn'; ``` - **修改或删除注释**: - 使用 `sp_updateextendedproperty` 更新注释或 `sp_dropextendedproperty` 删除[^4]。 - 查询现有注释: ```sql SELECT o.name AS tableName, c.name AS columnName, p.[value] AS Description FROM sysproperties p INNER JOIN sysobjects o ON o.id = p.id INNER JOIN syscolumns c ON p.id = c.id AND p.smallid = c.colid WHERE p.name = 'MS_Description' AND o.name = '名' AND c.name = '字段名'; ``` - **优点**: 注释有助于文档化管理,不影响结构。 - **注意事项**: 确保指定正确的架构、字段层级[^3]。 #### 4. **批量修改字段类型** 对于多字段的批量操作,可使用动态 SQL: - **示例脚本** (将指定的 `char(10)` 字段改为 `varchar(20)`): ```sql DECLARE @sql NVARCHAR(MAX); SELECT @sql = COALESCE(@sql + '; ', '') + 'ALTER TABLE ' + QUOTENAME(d.name) + ' ALTER COLUMN ' + QUOTENAME(a.name) + ' varchar(20)' FROM syscolumns a INNER JOIN systypes b ON a.xtype = b.xtype INNER JOIN sysobjects d ON a.id = d.id WHERE d.xtype = 'U' AND d.name = '名' AND b.name = 'char' AND a.length = 10; EXEC sp_executesql @sql; ``` - 此脚本基于系统查询符合条件的字段并生成 ALTER 命令[^5]。 - **优点**: 高效处理大量字段。 - **注意事项**: 批量操作前务必备份数据;测试脚本在非生产环境验证[^5]。 #### **关键建议** - **备份优先**: 修改结构前,执行 `BACKUP DATABASE` 防止意外数据丢失。 - **性能影响**: 大修改可能引起锁或阻塞,使用 `WITH (ONLINE = ON)`(企业版支持)减少停机。 - **兼容性检查**: 确保字段修改不影响现有查询(如索引或存储过程)。 - **工具选择**: 简单修改用 SSMS;复杂或批量操作用 T-SQL。 通过上述方法,您可以安全地修改 SQL Server 表字段。如果需要更具体的场景帮助,请提供结构或修改需求细节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值