如题。
解决方案 »
- 帮小妹一把,求一SQL,请大家帮忙,找出树的叶子结点????在线等,解决立结贴
- sql server 2005 里面可以实现像ACCESS中的链接表这样的功能吗?
- 请教插入数据问题
- 《数据模型资源手册》(1,2卷)这本书怎么样?(简介:此书将会把数据库开发项目带到一个高起点上。)
- sql 行转列,高手进
- t1表中有num字段,t2表中有num字段,查找两个表中num字段值不同的那些数据..
- 开发中大型网站是选用sql server2000还是mysql更为合适?
- 使用sql语句,怎样在系统表内查出数据表设置主键的字段名,或者提示会用到哪些系统表,先谢了
- 关于SQL7的备份方案,怎样才能在系统崩溃后把损失减少到最小??来者有分
- sql6.5主服务器数据库总空间1150M可用空间480M,备份服务器总空间1150M可用640M,两机每日定时TRANSFER,为何可用空间不一至。
- agent服务启动失败(内详)
- sql2005下,如何知道数据库中,每个表的大小和行数.
DROP COLUMN ColumnName
GO
--邹老大的存储过程。
CREATE PROC p_DropIDENTITY
@TableName sysname --要处理的表名
AS
IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),N'IsUserTable'),0)=0
BEGIN
RAISERROR('"%s" 必须是当前数据库中已经存在的用户表',12,16,@TableName)
RETURN
END--标识列转换处理检查
DECLARE @s nvarchar(1000),@FieldName sysname,@bkFieldName sysname,@sql nvarchar(4000)
SELECT @FieldName=QUOTENAME(c.name),
@bkFieldName=CAST(NEWID() as char(36)),
@s=@FieldName+N' '+QUOTENAME(t.name)
+CASE WHEN t.name LIKE '%int' THEN N''
ELSE N'('+CAST(c.prec as varchar)
+N','+CAST(c.scale as varchar)+N')'
END
FROM sysobjects o,syscolumns c,systypes t
WHERE o.name=@TableName
AND o.id=c.id
AND c.xusertype=t.xusertype
AND c.status=0x80
IF @@ROWCOUNT=0
BEGIN
RAISERROR(N'表 "%s" 中无标识列',1,16,@TableName)
RETURN
END--修改标识列名
SET @sql=QUOTENAME(@TableName)+N'.'+@FieldName
EXEC sp_rename @sql,@bkFieldName,N'COLUMN'--转换为标识列处理
SELECT @TableName=QUOTENAME(@TableName),
@bkFieldName=QUOTENAME(@bkFieldName)
EXEC('ALTER TABLE '+@TableName+N' ADD '+@s)
EXEC('UPDATE '+@TableName+N' SET '+@FieldName+N'='+@bkFieldName+N'
ALTER TABLE '+@TableName+N' DROP COLUMN '+@bkFieldName)
RAISERROR(N'表 "%s" 中的标识列 "%s" 已经转换为普通列',1,16,@TableName,@FieldName)
Insert TEST Select 'liu,jun,lyg'
Union All Select 'bb,aa'
Union All Select 'cc,dd,ee'
GO
Alter Table TEST Drop Column IDSelect *From TEST
GO
Drop Table TEST
需求更正为如何将一列自增列改为非自增。
不想用脚本变更保存下的那段长的脚本,希望手写。
--邹老大的存储过程。
CREATE PROC p_DropIDENTITY
@TableName sysname --要处理的表名
AS
IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),N'IsUserTable'),0)=0
BEGIN
RAISERROR('"%s" 必须是当前数据库中已经存在的用户表',12,16,@TableName)
RETURN
END--标识列转换处理检查
DECLARE @s nvarchar(1000),@FieldName sysname,@bkFieldName sysname,@sql nvarchar(4000)
SELECT @FieldName=QUOTENAME(c.name),
@bkFieldName=CAST(NEWID() as char(36)),
@s=@FieldName+N' '+QUOTENAME(t.name)
+CASE WHEN t.name LIKE '%int' THEN N''
ELSE N'('+CAST(c.prec as varchar)
+N','+CAST(c.scale as varchar)+N')'
END
FROM sysobjects o,syscolumns c,systypes t
WHERE o.name=@TableName
AND o.id=c.id
AND c.xusertype=t.xusertype
AND c.status=0x80
IF @@ROWCOUNT=0
BEGIN
RAISERROR(N'表 "%s" 中无标识列',1,16,@TableName)
RETURN
END--修改标识列名
SET @sql=QUOTENAME(@TableName)+N'.'+@FieldName
EXEC sp_rename @sql,@bkFieldName,N'COLUMN'--转换为标识列处理
SELECT @TableName=QUOTENAME(@TableName),
@bkFieldName=QUOTENAME(@bkFieldName)
EXEC('ALTER TABLE '+@TableName+N' ADD '+@s)
EXEC('UPDATE '+@TableName+N' SET '+@FieldName+N'='+@bkFieldName+N'
ALTER TABLE '+@TableName+N' DROP COLUMN '+@bkFieldName)
RAISERROR(N'表 "%s" 中的标识列 "%s" 已经转换为普通列',1,16,@TableName,@FieldName)
GO
EXEC p_DropIDENTITY 你的表名
Insert TEST Select 'liu,jun,lyg'
Union All Select 'bb,aa'
Union All Select 'cc,dd,ee'
GO
--方法二
--1、增加一个int类型的列
Alter Table TEST Add NID Int
GO
--2、更新新列的数据为自增列的数据
Update TEST Set NID=ID
--3、删除自增列
Alter Table TEST Drop Column ID
--4、更改新列名为原自增列的列名
EXEC sp_rename N'TEST.NID','ID',N'column'
GO
Drop Table TEST
reconfigure with override
go
update syscolumns set colstat=0 where id=object_id('tablename') and colstat=1
go
sp_configure 'allow update',0
reconfigure with override
Insert TEST Select 'liu,jun,lyg'
Union All Select 'bb,aa'
Union All Select 'cc,dd,ee'
GO
--方法三
EXEC sp_configure 'Allow update',1
RECONFIGURE WITH OVERRIDE
GO
Update syscolumns set colstat=0 where colstat=1 and id=object_id('TEST')
EXEC sp_configure 'Allow update',0
RECONFIGURE WITH OVERRIDE
GO
Drop Table TEST
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[a]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[a]
GOCreate TABLE [dbo].[a] (
[id] [int] NOT NULL ,
[title] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
--2.加identity属性
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
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
Create TABLE dbo.Tmp_a
(
id int NOT NULL IDENTITY (1, 1),
title char(10) NULL
) ON [PRIMARY]
GO
SET IDENTITY_Insert dbo.Tmp_a ON
GO
IF EXISTS(Select * FROM dbo.a)
EXEC('Insert INTO dbo.Tmp_a (id, title)
Select id, title FROM dbo.a TABLOCKX')
GO
SET IDENTITY_Insert dbo.Tmp_a OFF
GO
Drop TABLE dbo.a
GO
EXECUTE sp_rename N'dbo.Tmp_a', N'a', 'OBJECT'
GO
Alter TABLE dbo.a ADD CONSTRAINT
PK_a PRIMARY KEY CLUSTERED
(
id
) ON [PRIMARY]GO
COMMIT
--3.去掉identity属性
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
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
Create TABLE dbo.Tmp_a
(
id int NOT NULL,
title char(10) NULL
) ON [PRIMARY]
GO
IF EXISTS(Select * FROM dbo.a)
EXEC('Insert INTO dbo.Tmp_a (id, title)
Select id, title FROM dbo.a TABLOCKX')
GO
Drop TABLE dbo.a
GO
EXECUTE sp_rename N'dbo.Tmp_a', N'a', 'OBJECT'
GO
Alter TABLE dbo.a ADD CONSTRAINT
PK_a PRIMARY KEY CLUSTERED
(
id
) ON [PRIMARY]GO
COMMIT
1.给表添加一列
2.update id列的值给新加列
3.删除id列
4.重命名新加列为id