【发布时间】:2012-09-22 14:14:22
【问题描述】:
我有这样的存储过程,在任何表的插入命令之后执行
Create Procedure [dbo].[HistoryInsert](
@TableName nVarchar(500),
@RecordId bigInt
)
As
declare @Query nVarChar(max)
if Not Exists (Select Top 1 1
From Information_schema.tables
Where Table_Name = @TableName + 'History')
Set @Query = 'Select * Into ' + @TableName + 'History FROM ' + @TableName
Else
Set @Query = 'Insert Into ' + @TableName + 'History Select * FROM ' + @TableName
Exec(@Query)
Exec(@Query)
当这个过程第一次执行时,历史表被创建。当此过程第二次执行时,插入失败,因为创建的表具有标识列。如何从表中选择所有列而不增加列的标识属性。
【问题讨论】:
-
使用
INSERT INTO tablename (list of columns - without the IDENTITY) SELECT ...? -
为什么选择和进入同一张表?
-
使用插入到历史表中的触发器用于'on insert'。
-
这个过程对所有表都是通用的,我不能使用列名。应该创建标识列但没有标识属性。
-
如果您使用 *,则将始终复制身份属性。无论如何,这看起来是个可怕的主意。
标签: sql sql-server