Sql 统计所有引用表中对特定行的引用
现在我有了列出所有引用表的代码,这样我就可以逐个计算表中的引用了 问题1:Sql 统计所有引用表中对特定行的引用,sql,tsql,Sql,Tsql,现在我有了列出所有引用表的代码,这样我就可以逐个计算表中的引用了 问题1: SELECT t.NAME AS TableWithForeignKey, c.NAME AS ForeignKeyColumn FROM sys.foreign_key_columns AS fk INNER JOIN sys.tables AS t ON fk.parent_object_id = t.object_id INNER JOIN sys.columns AS c ON fk.pa
SELECT t.NAME AS TableWithForeignKey,
c.NAME AS ForeignKeyColumn
FROM sys.foreign_key_columns AS fk
INNER JOIN sys.tables AS t
ON fk.parent_object_id = t.object_id
INNER JOIN sys.columns AS c
ON fk.parent_object_id = c.object_id
AND fk.parent_column_id = c.column_id
WHERE fk.referenced_object_id = (
SELECT object_id
FROM sys.tables
WHERE NAME = 'MAIN_TABLE'
)
问题2:
SELECT COUNT(MAIN_ID)
FROM MAIN_TABLE
INNER JOIN REF_TABLE_1
ON MAIN_TABLE.ID = REF_TABLE_1.MAIN_ID
问题3:
SELECT COUNT(MAIN_ID)
FROM MAIN_TABLE
INNER JOIN REF_TABLE_2
ON MAIN_TABLE.ID = REF_TABLE_2.MAIN_ID
等等
可以在一个查询中使用它吗?我尝试使用sql block语句而不是单个查询来解决它。如果它能解决您的问题,请尝试使用。您也可以为它创建一个存储过程
BEGIN
CREATE TABLE #tempTable (TName NVARCHAR(100), FKey NVARCHAR(100), RCount BIGINT)
INSERT INTO #tempTable(TName, FKey)
SELECT t.NAME AS TableWithForeignKey,
c.NAME AS ForeignKeyColumn
FROM sys.foreign_key_columns AS fk
INNER JOIN sys.tables AS t
ON fk.parent_object_id = t.object_id
INNER JOIN sys.columns AS c
ON fk.parent_object_id = c.object_id
AND fk.parent_column_id = c.column_id
WHERE fk.referenced_object_id = (
SELECT object_id
FROM sys.tables
WHERE NAME = ''MAIN_TABLE'
)
SELECT * FROM #tempTable
DECLARE tempT CURSOR FOR SELECT TName FROM #tempTable
DECLARE @tn NVARCHAR(100)
OPEN tempT
FETCH NEXT FROM tempT INTO @tn
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC (N'UPDATE #tempTable SET RCount = (SELECT COUNT(*) FROM ' + @tn + ') WHERE TName =''' + @tn + '''')
FETCH NEXT FROM tempT INTO @tn
END
CLOSE tempT;
DEALLOCATE tempT;
SELECT * FROM #tempTable
DROP TABLE #tempTable
END
我试图通过使用sql block语句而不是单个查询来解决这个问题。如果它能解决您的问题,请尝试使用。您也可以为它创建一个存储过程
BEGIN
CREATE TABLE #tempTable (TName NVARCHAR(100), FKey NVARCHAR(100), RCount BIGINT)
INSERT INTO #tempTable(TName, FKey)
SELECT t.NAME AS TableWithForeignKey,
c.NAME AS ForeignKeyColumn
FROM sys.foreign_key_columns AS fk
INNER JOIN sys.tables AS t
ON fk.parent_object_id = t.object_id
INNER JOIN sys.columns AS c
ON fk.parent_object_id = c.object_id
AND fk.parent_column_id = c.column_id
WHERE fk.referenced_object_id = (
SELECT object_id
FROM sys.tables
WHERE NAME = ''MAIN_TABLE'
)
SELECT * FROM #tempTable
DECLARE tempT CURSOR FOR SELECT TName FROM #tempTable
DECLARE @tn NVARCHAR(100)
OPEN tempT
FETCH NEXT FROM tempT INTO @tn
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC (N'UPDATE #tempTable SET RCount = (SELECT COUNT(*) FROM ' + @tn + ') WHERE TName =''' + @tn + '''')
FETCH NEXT FROM tempT INTO @tn
END
CLOSE tempT;
DEALLOCATE tempT;
SELECT * FROM #tempTable
DROP TABLE #tempTable
END
这很复杂,取决于你想做什么。我想这些资源可能会帮助你解决你的问题:希望这对你有帮助,这是你在我的帖子中看到的问题1吗?它给出了参考表。但我需要将Query1和以下查询(Query2,Query3…)组合在一个查询中(如果可能的话)。我会看这篇关于子查询的文章:我不清楚REF_TABLE_1等是什么意思。在外部联接、子查询和联合之间,我想是这样的,或者您可以动态构造SQL并使用sp_ExecuteSQL在单个表中获得结果?这相当复杂,而且取决于您想要做什么。我想这些资源可能会帮助你解决你的问题:希望这对你有帮助,这是你在我的帖子中看到的问题1吗?它给出了参考表。但我需要将Query1和以下查询(Query2,Query3…)组合在一个查询中(如果可能的话)。我会看这篇关于子查询的文章:我不清楚REF_TABLE_1等是什么意思。在外部联接、子查询和联合之间,我想是这样的,或者您可以动态构造SQL并使用sp_ExecuteSQL在单个表中获取结果?