我花了很多时间来解决这个问题的解决方案,所以本帖子的精神,我在这里发布,因为我觉得它可能对其他人有用.
如果有人有更好的脚本或任何要添加的内容,请发布.
编辑:是的,我知道如何在Management Studio中执行此操作 - 但我需要能够在另一个应用程序中执行此操作.
它写在每本书中,外键实际上是其他表中的主键但是我们可以有一个外键,它不是任何其他表中的主键
我有60张桌子.我想删除10个表,其中这10个表是约束(PK,FK)到其他20个表.删除这10个表时,我需要截断或删除其他20个表中的数据.最后,我想禁用所有60个表约束(FK,PK),然后在完成添加/删除表的工作后启用所有60个表约束.这可能吗?
当我放下一张桌子时,它要求FK.当我截断那些FK依赖项时,它仍然显示相同.我不想搞砸所有那些FK,PK.
我想知道更聪明的方法.
sql-server constraints foreign-keys foreign-key-relationship sql-server-2008
我希望能够将带有标识列的表中的数据插入到SQL Server 2005中的临时表中.
TSQL看起来像:
-- Create empty temp table
SELECT *
INTO #Tmp_MyTable
FROM MyTable
WHERE 1=0
...
WHILE ...
BEGIN
...
INSERT INTO #Tmp_MyTable
SELECT TOP (@n) *
FROM MyTable
...
END
Run Code Online (Sandbox Code Playgroud)
上面的代码使用标识列创建了#Tmp_Table,然后插入失败并显示错误"只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'#Tmp_MyTable'中标识列的显式值."
TSQL中是否有一种方法可以删除临时表中列的标识属性而不显式列出所有列?我特别想使用"SELECT*",以便在将新列添加到MyTable时代码将继续工作.
我相信删除和重新创建列将改变其位置,使得无法使用SELECT*.
更新:
我已尝试在一个响应中建议使用IDENTITY_INSERT.它不起作用 - 见下面的repro.我究竟做错了什么?
-- Create test table
CREATE TABLE [dbo].[TestTable](
[ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NULL,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
(
[ID] ASC
)
)
GO
-- Insert some data
INSERT INTO TestTable
(Name)
SELECT 'One'
UNION …Run Code Online (Sandbox Code Playgroud) 我们有一张约有150万条记录的表格.该表与不同的表有很多FK关系.
问题是100万条记录只是重复,必须删除.我们当时尝试删除1000条记录,但这是一个非常缓慢的过程.
我的想法是临时复制必须留在新表中的记录.截断现有的并复制必须留下的记录.将主键和所有关系还原到其他表.所以从客户端来看,你看不出有任何区别.
不确定这是否是一种有效的方式.
如果我希望看到它的基本实现,那么我可以关注并适用于我的案例.如果不是,我希望看到有效的方法.
谢谢