一个超级严重的问题。是不是SQL SERVER的BUG?谁能帮忙解决?分不够可以继续+。

blood 2006-11-02 04:55:27
CREATE TABLE MyCustomers (
CustID INTEGER IDENTITY (100,1) PRIMARY KEY,
CompanyName NvarChar (50)
)
INSERT INTO MyCustomers
(CompanyName)
VALUES
('A. Datum Corporation')

ALTER TABLE MyCustomers ALTER COLUMN CustId IDENTITY (200, 2)

这段代码谁能运行下去?前面的不管,ALTER TABLE MyCustomers ALTER COLUMN CustId IDENTITY (200, 2)
主要是这一句。修改字段的,我运行,不带IDENTITY 什么都OK。带IDENTITY,根本直接语法就过不去。
我用的SQL SERVER 2005,刚才这段代码也是SQL SERVER 2005的HELP中的ALTER TABLE中的SAMPLE代码。
谁知道为什么不能修改IDENTITY?难道这个真的是SQL SERVER的低级BUG?
...全文
309 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
blood 2006-11-02
  • 打赏
  • 举报
回复
顶起来。大家继续关注的问题。看看有没有什么其他的办法解决这个问题。
目前证实,SSIS中,前面的SQL任务中SET IDENTITY_INSERT dbo.MyCustomers ON无效。
执行到数据流,还是照样执行自增操作。请问目前这样的情况还有解决的办法吗?
全代码执行,有办法可寻吗?
希望大家继续关注。能找出问题的解决办法。
blood 2006-11-02
  • 打赏
  • 举报
回复
SQL SERVER的HELP中提供的SAMPLE代码。
我问题中贴的就是SQL SERVER HELP中的SAMPLE代码
子陌红尘 2006-11-02
  • 打赏
  • 举报
回复
还是说明这是SQL SERVER的BUG了?SAMPLE代码中写的可以修改。应该是SAMPLE代码的错误吧。
----------------------------------------------------------------------------------
哪里提供的SAMPLE代码?
eaststarwy 2006-11-02
  • 打赏
  • 举报
回复
关注,大家看看吧,我回家吃饭睡觉,收藏先,SSIS我还没用我一直DTS ,哪天我也更新到2005
blood 2006-11-02
  • 打赏
  • 举报
回复
还是说明这是SQL SERVER的BUG了?SAMPLE代码中写的可以修改。应该是SAMPLE代码的错误吧。
如果这样,我现在遇到问题。
我要导数据,做的SSIS包程序来导
源数据的ID字段是自增的,这个可以不管。
目标表的ID字段也是自增的。
但是我需要把源数据的ID原原本本的放在目标表的ID字段里。就是说源数据是什么,目标表中的就是什么,必须严格的保证数据的完整性。不能有任何错误。
我在SSIS的包中添加了
SET IDENTITY_INSERT dbo.PU_Account ON
然后再执行数据导入的数据流步骤。
但是无任何效果。源数据的ID没有导到目标表中。目标表中的ID还是一样自增。。。
郁闷死我了。
所以我只能是去修改自增字段来停止自增。
道具导完再恢复自增。。只能这样。
谁有办法可以实现呢?或者给出思路。THX。所有操作需要在SSIS中实现。
eaststarwy 2006-11-02
  • 打赏
  • 举报
回复
恩,我也在考虑这个问题,如果允许这个格式语句,对于已经存在的列,执行完以后按照设计想法就是seed 与Increment 重算了,从应用角度考虑只有存储过程才可以达到这个效果,我想即便你找到MS他也不会承认这是BUG了吧?
子陌红尘 2006-11-02
  • 打赏
  • 举报
回复
联机alter table 里有使用IDENTITY 格式说明
----------------------------------------------------------------------------------------------
确实有,但是属于< column_definition > 部分,该部分只在表中新增列的时候才允许使用。
eaststarwy 2006-11-02
  • 打赏
  • 举报
回复
联机alter table 里有使用IDENTITY 格式说明
youqiong 2006-11-02
  • 打赏
  • 举报
回复
DEFAULT

是指定列默认值的关键字。DEFAULT 定义可用于为表中现有行的新列提供值。DEFAULT 定义不能添加到具有 timestamp 数据类型、IDENTITY 属性、现有 DEFAULT 定义或绑定默认值的列。如果列已有默认值,必须除去旧默认值后才能添加新默认值。为同 SQL Server 先前版本保持兼容性,向 DEFAULT 赋予约束名是可能的。

IDENTITY

指定新列是标识列。在表中添加新行时,SQL Server 为列提供一个唯一的增量值。标识列通常与 PRIMARY KEY 约束一起用作表的唯一行标识符。IDENTITY 属性可赋予 tinyint、smallint、int、bigint、decimal(p,0) 或者 numeric(p,0) 列。对于每个表只能创建一个标识列。DEFAULT 关键字和绑定默认值不能用于标识列。要么种子和增量都同时指定,要么都不指定。如果二者都未指定,则取默认值 (1,1)。

zhenmeiyisi 2006-11-02
  • 打赏
  • 举报
回复
看看ms是怎么干的吧 :)

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
CREATE TABLE dbo.Tmp_MyCustomers
(
CustID int NOT NULL IDENTITY (100, 2),
CompanyName nvarchar(50) NULL
) ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_MyCustomers ON
GO
IF EXISTS(SELECT * FROM dbo.MyCustomers)
EXEC('INSERT INTO dbo.Tmp_MyCustomers (CustID, CompanyName)
SELECT CustID, CompanyName FROM dbo.MyCustomers (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_MyCustomers OFF
GO
DROP TABLE dbo.MyCustomers
GO
EXECUTE sp_rename N'dbo.Tmp_MyCustomers', N'MyCustomers', 'OBJECT'
GO
ALTER TABLE dbo.MyCustomers ADD CONSTRAINT
PK__MyCustomers__4316F928 PRIMARY KEY CLUSTERED
(
CustID
) ON [PRIMARY]

GO
子陌红尘 2006-11-02
  • 打赏
  • 举报
回复
SQL Server 2000不支持这样的修改,你可以先打开事件探查器,然后在企业管理器中手工修改字段的属性为自增类型,SQL Server 2000的处理机制可以在事件探查器中被捕捉。
zhenmeiyisi 2006-11-02
  • 打赏
  • 举报
回复
只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。

尽管类似,但是 IDENTITY 函数不是与 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 属性。

blood 2006-11-02
  • 打赏
  • 举报
回复
位置反了?
你能给出正确的代码吗?
你自己试验完再告诉我吧。
我现在除了给MS打电话。好像其他办法都无法解决这个问题。
希望不要是BUG。否则那样就真郁闷了。
eaststarwy 2006-11-02
  • 打赏
  • 举报
回复
惭愧,说错了
eaststarwy 2006-11-02
  • 打赏
  • 举报
回复
位置反了

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧