jwa*_*zko 2 c# sql-server ado.net
我正在编写小型应用程序(在 c# 中),它帮助我截断 SQL Server 2005/08 中的表。为了截断表,我想我需要这样做:
有人可以帮助我创建这样的脚本,或者指出我可以在哪里找到一些线索?
问候
好吧,你可以从你的应用程序中做到这一点:
您可以通过检查系统目录视图来完成此操作。
此处的查询将为您提供所有外键约束的列表:
select
fk.name,
object_name(fk.parent_object_id) 'Parent table',
c1.name 'Parent column',
object_name(fk.referenced_object_id) 'Referenced table',
c2.name 'Referenced column'
from
sys.foreign_keys fk
inner join
sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
inner join
sys.columns c1 ON fkc.parent_column_id = c1.column_id and c1.object_id = fkc.parent_object_id
inner join
sys.columns c2 ON fkc.referenced_column_id = c2.column_id and c2.object_id = fkc.referenced_object_id
Run Code Online (Sandbox Code Playgroud)
通过组合这些元素,您可以创建DROP CONSTRAINT要在表截断之前运行的命令列表:
select
'ALTER TABLE dbo.' + object_name(fk.parent_object_id) +
' DROP CONSTRAINT ' + fk.name
from
sys.foreign_keys fk
Run Code Online (Sandbox Code Playgroud)
并且您还可以创建ALTER TABLE要在截断后运行的脚本以恢复外键关系。
select
'ALTER TABLE dbo.' + object_name(fk.parent_object_id) +
' ADD CONSTRAINT ' + fk.name +
' FOREIGN KEY(' + c1.name + ') REFERENCES dbo.' +
object_name(fk.referenced_object_id) + '(' + c2.name + ')'
from
sys.foreign_keys fk
inner join
sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
inner join
sys.columns c1 ON fkc.parent_column_id = c1.column_id and c1.object_id = fkc.parent_object_id
inner join
sys.columns c2 ON fkc.referenced_column_id = c2.column_id and c2.object_id = fkc.referenced_object_id
Run Code Online (Sandbox Code Playgroud)
对于这两个查询,这是一个两步过程:
限制:现在,该脚本仅在您有单列外键时才假设和工作;如果你没有那个,你可能需要稍微调整一下脚本。
| 归档时间: |
|
| 查看次数: |
7201 次 |
| 最近记录: |