Are*_*ren 15 t-sql sql-server alter-table
我对T-SQL有点新意,来自MySQL背景我还在适应语法中的不同细微差别.
我想在特定的一个后添加一个新列.我发现这AFTER是一个有效的关键字,但我认为这不适合这项工作.
ALTER TABLE [dbo].[InvStockStatus]
ADD [Abbreviation] [nvarchar](32) DEFAULT '' NOT NULL ;
Run Code Online (Sandbox Code Playgroud)
这是我目前的查询,效果很好,但它增加了外地在表的末尾,身份证宁愿它添加后 [Name].我正在寻找代表这个的语法是什么?
SQL*_*ace 23
你不能这样做
例如,如果你有这样的表
create table TestTable(id1 int,id3 int)
Run Code Online (Sandbox Code Playgroud)
并且您想在id1和id3之间添加另一个列id2,那么如果您使用设计器,这就是SQL Server在场景后面做的事情
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_TestTable
(
id1 int NULL,
id2 int NULL,
id3 int NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_TestTable SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.TestTable)
EXEC('INSERT INTO dbo.Tmp_TestTable (id1, id3)
SELECT id1, id3 FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.TestTable
GO
EXECUTE sp_rename N'dbo.Tmp_TestTable', N'TestTable', 'OBJECT'
GO
COMMIT
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,如果您有大量数据,这可能会有问题,为什么列位于何处?只是用
select col1,col2,col3 from table
Run Code Online (Sandbox Code Playgroud)
从功能数据库的角度来看,元组可以按任何顺序出现是正确的.
但是真空中不存在数据库.总有一个人会想要读取表模式(dbas,devs)并绕过它并维护或编写查询.
在过去,我使用了表的列的约定,例如用表订购表
这些在扫描桌子时有帮助.不幸的是,你似乎必须通过箍来维持任何秩序,所以现在我不得不质疑它是否值得拥有和维护这些约定.我的新规则只是将它添加到最后.
如果您从可读性角度真的担心订单,那么您应该按照您想要的任何顺序创建自己的"可读性"视图(可能在不同的模式中).您可以拥有同一个表的多个视图(一个用于核心列,另一个包含通常不相关的东西).
能够在SQL Server数据库图表中重新排序列(仅作为显示内容)会很高兴,但这是不可能的.
在任何RDBMS中,列的顺序在严格(功能)意义上都是无关紧要的 - 它只是文档或人类可以看到的"精确".
SQL Server不支持任何T-SQL命令以任何方式对列进行排序.所以在T-SQL中没有语法来实现这一点.
改变它的唯一方法是在SSMS中使用可视表设计器,当您在列中移动列或在表的中间插入列时,它实际上从头开始重新创建整个表.
| 归档时间: |
|
| 查看次数: |
24802 次 |
| 最近记录: |