直接用语句搞不定. 只能将结果插入一新表,删除原始表,然后再从新表创建回来.select a , b = '...', c into tb2 from tb1 drop table tb1 select * into tb1 from tb2
一个语句搞不定,可在企业管理器中修改表,插入字段,再点生成sql语句的按钮,自动生成sql 语句
SQL可以实现添加列到指定位置--开启系统表写功能以便创建存储过程 EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE GOCREATE PROC sp_addColumn @TableName sysname, --要添加字段的表名 @FieldDefine nvarchar(1000), --要添加的列的定义,定义必须符合ALTER TABLE tbname ADD规范 @Position int=-1 --添加列位置,其值为1~表的总列数,比如1,表示添加为第1列, -- 如果@Position无效,则仅添加列 AS IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),'IsUserTable'),0)=0 BEGIN RAISERROR(N'无效的表名 "%s"',12,16,@TableName) return END--添加字段 DECLARE @s nvarchar(4000) SET @s=N'ALTER TABLE '+QUOTENAME(@TableName)+N' ADD '+@FieldDefineBEGIN TRAN EXEC sp_executesql @s IF @@ERROR=0 BEGIN DECLARE @maxcolid int SELECT @Position=ISNULL(@Position,0),@maxcolid=MAX(colid) FROM syscolumns WHERE id=OBJECT_ID(@TableName) IF @Position>0 AND @Position<@maxcolid UPDATE syscolumns SET colid=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END, colorder=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END WHERE id=OBJECT_ID(@TableName) AND colid>=@Position COMMIT TRAN END ELSE ROLLBACK TRAN GO--关闭系统表写功能 EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
----测试 --开启系统表写功能以便创建存储过程 EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE GOcreate table a (a varchar(1) null,c varchar(1) null); go /* a c ---- ---- (所影响的行数为 0 行) */CREATE PROC sp_addColumn @TableName sysname, --要添加字段的表名 @FieldDefine nvarchar(1000), --要添加的列的定义,定义必须符合ALTER TABLE tbname ADD规范 @Position int=-1 --添加列位置,其值为1~表的总列数,比如1,表示添加为第1列, -- 如果@Position无效,则仅添加列 AS IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),'IsUserTable'),0)=0 BEGIN RAISERROR(N'无效的表名 "%s"',12,16,@TableName) return END--添加字段 DECLARE @s nvarchar(4000) SET @s=N'ALTER TABLE '+QUOTENAME(@TableName)+N' ADD '+@FieldDefineBEGIN TRAN EXEC sp_executesql @s IF @@ERROR=0 BEGIN DECLARE @maxcolid int SELECT @Position=ISNULL(@Position,0),@maxcolid=MAX(colid) FROM syscolumns WHERE id=OBJECT_ID(@TableName) IF @Position>0 AND @Position<@maxcolid UPDATE syscolumns SET colid=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END, colorder=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END WHERE id=OBJECT_ID(@TableName) AND colid>=@Position COMMIT TRAN END ELSE ROLLBACK TRAN GO ---增加新列到2 exec sp_addColumn 'a','b int',2select * from a /*a b c ---- ----------- ---- (所影响的行数为 0 行) */--关闭系统表写功能 EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE go drop table a drop proc sp_addColumn
在企业管理器里—数据库—表—右健—设计表—在a列和C列—右健插入B列。。 可任意调整
在企业管理器里—数据库—表—右健—设计表—在a列和C列—右健插入B列。。 可任意调整---------------------------create table a (a varchar(1) null,c varchar(1) null); 怎么才能在字段c前面增加一个字段b,SQL语句怎么写!谢了!
create table a (a varchar(1) null,c varchar(1) null); 怎么才能在字段c前面增加一个字段b,SQL语句怎么写!谢了!?----------- 在SQL2005的环境下,在企业管理里有修改,选择生成SQL脚本,就行了 生成脚本也就是用一个事务,用新表得到旧表数据,重命名表
只能将结果插入一新表,删除原始表,然后再从新表创建回来.select a , b = '...', c into tb2 from tb1
drop table tb1
select * into tb1 from tb2
EXEC sp_configure 'allow updates',1
RECONFIGURE WITH OVERRIDE
GOCREATE PROC sp_addColumn
@TableName sysname, --要添加字段的表名
@FieldDefine nvarchar(1000), --要添加的列的定义,定义必须符合ALTER TABLE tbname ADD规范
@Position int=-1 --添加列位置,其值为1~表的总列数,比如1,表示添加为第1列,
-- 如果@Position无效,则仅添加列
AS
IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),'IsUserTable'),0)=0
BEGIN
RAISERROR(N'无效的表名 "%s"',12,16,@TableName)
return
END--添加字段
DECLARE @s nvarchar(4000)
SET @s=N'ALTER TABLE '+QUOTENAME(@TableName)+N' ADD '+@FieldDefineBEGIN TRAN
EXEC sp_executesql @s
IF @@ERROR=0
BEGIN
DECLARE @maxcolid int
SELECT @Position=ISNULL(@Position,0),@maxcolid=MAX(colid)
FROM syscolumns
WHERE id=OBJECT_ID(@TableName)
IF @Position>0 AND @Position<@maxcolid
UPDATE syscolumns SET
colid=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END,
colorder=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END
WHERE id=OBJECT_ID(@TableName)
AND colid>=@Position
COMMIT TRAN
END
ELSE
ROLLBACK TRAN
GO--关闭系统表写功能
EXEC sp_configure 'allow updates',1
RECONFIGURE WITH OVERRIDE
--开启系统表写功能以便创建存储过程
EXEC sp_configure 'allow updates',1
RECONFIGURE WITH OVERRIDE
GOcreate table a (a varchar(1) null,c varchar(1) null);
go
/*
a c
---- ---- (所影响的行数为 0 行)
*/CREATE PROC sp_addColumn
@TableName sysname, --要添加字段的表名
@FieldDefine nvarchar(1000), --要添加的列的定义,定义必须符合ALTER TABLE tbname ADD规范
@Position int=-1 --添加列位置,其值为1~表的总列数,比如1,表示添加为第1列,
-- 如果@Position无效,则仅添加列
AS
IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),'IsUserTable'),0)=0
BEGIN
RAISERROR(N'无效的表名 "%s"',12,16,@TableName)
return
END--添加字段
DECLARE @s nvarchar(4000)
SET @s=N'ALTER TABLE '+QUOTENAME(@TableName)+N' ADD '+@FieldDefineBEGIN TRAN
EXEC sp_executesql @s
IF @@ERROR=0
BEGIN
DECLARE @maxcolid int
SELECT @Position=ISNULL(@Position,0),@maxcolid=MAX(colid)
FROM syscolumns
WHERE id=OBJECT_ID(@TableName)
IF @Position>0 AND @Position<@maxcolid
UPDATE syscolumns SET
colid=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END,
colorder=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END
WHERE id=OBJECT_ID(@TableName)
AND colid>=@Position
COMMIT TRAN
END
ELSE
ROLLBACK TRAN
GO
---增加新列到2
exec sp_addColumn 'a','b int',2select * from a
/*a b c
---- ----------- ---- (所影响的行数为 0 行)
*/--关闭系统表写功能
EXEC sp_configure 'allow updates',1
RECONFIGURE WITH OVERRIDE
go
drop table a
drop proc sp_addColumn
可任意调整
可任意调整---------------------------create table a (a varchar(1) null,c varchar(1) null);
怎么才能在字段c前面增加一个字段b,SQL语句怎么写!谢了!
怎么才能在字段c前面增加一个字段b,SQL语句怎么写!谢了!?-----------
在SQL2005的环境下,在企业管理里有修改,选择生成SQL脚本,就行了
生成脚本也就是用一个事务,用新表得到旧表数据,重命名表