[英]Is there any way to create a table with the same layout as a view in SQL Server 2005?
[英]Way to react on deleting any row from table in sql server 2005
在我们的数据库中,我们有很多表(当然)。 在我们的数据库中有一个表说文件。 该表包含与每个表相关的所有文件的列表,如人物,联系人等。现在文件表中有一列(父记录)存储父记录键(而不是数据库级的外键),因为不可能列与多个表有关系),无论是人员还是联系人。 现在,我想在一个地方的数据库级别创建一些东西,以查看我们已从人员中删除行,因此从联系人中删除所有行。
获取现有数据后,我们将无法更改表的结构。
谢谢
“ pst”建议的方法本质上是垃圾回收方法,可能比使用触发器更受青睐。 如果不了解系统的整体特征,那么如果响应能力更为重要,则此方法将不会在删除给定记录上增加任何时间。 换句话说,拥有未引用资源的风险小于减慢删除步骤的风险。
此示例代码将遍历具有标识的表,并删除集中式“资源”表中该表的所有孤立项。
假设:
(发布在Microsft脚本中心上) http://gallery.technet.microsoft.com/scriptcenter/Garbage-Collection-of-a-99594c13
DECLARE @ResourceTableName sysname
SET @ResourceTableName = 'Resource'
--cursor variables
DECLARE @sql nvarchar(max)
DECLARE @primarySchema sysname
DECLARE @primaryTableName sysname
DECLARE @identityColumnName sysname
DECLARE curTableName CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
SELECT table_schema, table_name, column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
AND table_name <> @ResourceTableName
-- loop through tables
OPEN curTableName
FETCH NEXT FROM curTableName
INTO @primarySchema, @primaryTableName, @identityColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = '
DELETE --SELECT *
FROM ' + @ResourceTableName + '
WHERE TableName = ''' + @primaryTableName + '''
AND ParentID NOT IN (
SELECT ' + @identityColumnName + ' FROM ' + @primarySchema + '.' + @primaryTableName + '
)'
--PRINT @sql
EXEC sp_ExecuteSQL @sql
FETCH NEXT FROM curTableName
INTO @primarySchema, @primaryTableName, @identityColumnName
END
-- close a cursor
CLOSE curTableName
DEALLOCATE curTableName
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.