假设,我知道数据库TableName1
中的表Database1
的名称。
我想找到:
是否有可用的SQL服务器查询(非存储过程)?
注意:
答案是“How can I list all foreign keys referencing a given table in SQL Server?”不满足我的要求,因为他们接受的回答是一个存储过程,其余的回复没有或没有结果。
例如,DailySale
表有两个外键,
但是这个查询
EXEC sp_fkeys 'TableName'
只列出一个。
答案 0 :(得分:1)
以下代码段可以用于某些用途,并根据您的进一步要求进行修改 -
这会提取列级详细信息,例如data type
,length
,precision
,scale
等...
SELECT obj.name AS FK_NAME,
sch.name AS [schema_name],
tab1.name AS [table],
col1.name AS [column],
tab2.name AS [referenced_table],
col2.name AS [referenced_column],
TY.[name] AS system_data_type, col1.[max_length],col1.[precision], col1.[scale], col1.[is_nullable], col1.[is_ansi_padded]
FROM sys.foreign_key_columns fkc
INNER JOIN sys.objects obj
ON obj.object_id = fkc.constraint_object_id
INNER JOIN sys.tables tab1
ON tab1.object_id = fkc.parent_object_id
INNER JOIN sys.schemas sch
ON tab1.schema_id = sch.schema_id
INNER JOIN sys.columns col1
ON col1.column_id = parent_column_id AND col1.object_id = tab1.object_id
INNER JOIN sys.tables tab2
ON tab2.object_id = fkc.referenced_object_id
INNER JOIN sys.columns col2
ON col2.column_id = referenced_column_id AND col2.object_id = tab2.object_id
INNER JOIN sys.[types] TY ON col1.[system_type_id] = TY.[system_type_id] AND col1.[user_type_id] = TY.[user_type_id]
AND tab1.name = 'TableName1'
答案 1 :(得分:0)
您可以使用OBJECT_NAME(f.parent_object_id) = 'tblpatientmaster'
切换--Reference in this table
SELECT
f.name constraint_name
,OBJECT_NAME(f.parent_object_id) referencing_table_name
,COL_NAME(fc.parent_object_id, fc.parent_column_id) referencing_column_name
,OBJECT_NAME (f.referenced_object_id) referenced_table_name
,COL_NAME(fc.referenced_object_id, fc.referenced_column_id) referenced_column_name
, DATA_TYPE column_data_type
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.object_id = fc.constraint_object_id
INNER JOIN INFORMATION_SCHEMA.COLUMNS col
ON COL_NAME(fc.parent_object_id, fc.parent_column_id) = col.COLUMN_NAME
where OBJECT_NAME(f.referenced_object_id) = 'YouTableName'
ORDER BY f.name
以获取此表的引用,以引用此表。
SELECT distinct
f.name constraint_name
,OBJECT_NAME(f.parent_object_id) referencing_table_name
,COL_NAME(fc.parent_object_id, fc.parent_column_id) referencing_column_name
,OBJECT_NAME (f.referenced_object_id) referenced_table_name
,COL_NAME(fc.referenced_object_id, fc.referenced_column_id) referenced_column_name
, DATA_TYPE column_data_type
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.object_id = fc.constraint_object_id
INNER JOIN INFORMATION_SCHEMA.COLUMNS col
ON COL_NAME(fc.parent_object_id, fc.parent_column_id) = col.COLUMN_NAME
where OBJECT_NAME(f.parent_object_id) = 'YouTableName'
ORDER BY f.name
- 将此表格引用到其他表格
double avg(int* grade, int len){
int i; int sum=0;
for(i=0;i<len;i++){
sum+=grade[i];
}
return (sum * 10 / len) / 10.0;
}