我有一个像这样的表格中心
| uid | CenterID | CenterName | AccessLock |
| ----|----------|------------|------------|
|1 | 1 | Andheri | 1 |
|2 | 2 | Borivali | 1 |
|1 | 3 | Dadar | 1 |
我的数据库中有100个表。
如果我想删除Dadar中心,那么首先我需要检查整个数据库中是否存在centerID=3
。
如果在列名为CenterID
的整个数据库中不存在dadar center CenterID
。
如何在整个数据库中找到CenterID=3
?
提前致谢!
答案 0 :(得分:0)
我想这段代码可以帮到你:
DECLARE @ColumnName SYSNAME = 'CenterID '
,@ColumnValue NVARCHAR(256) = '3'
DECLARE @DynamicSQLStatement NVARCHAR(MAX)
SELECT @DynamicSQLStatement =STUFF
(
(
SELECT ' UNION ALL ' + CHAR(10) + ' SELECT TOP 1 ''' + t.name + ''' AS T FROM ' + SCHEMA_NAME(t.schema_id) + '.' + t.name + ' WHERE ' + @ColumnName + ' = ' + @ColumnValue + CHAR(10)
FROM sys.tables t
INNER JOIN sys.columns c
on t.[object_id] = c.[object_id]
WHERE c.[name] = @ColumnName
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1
,12
,''
);
EXEC sp_executesql @DynamicSQLStatement
正在寻找具有特定列的所有表。然后它查询所有这些表,以查找给定列是否具有特定值,如果是,则返回表名。
这里更好的是阅读有关数据完整性或更具体的外键。
答案 1 :(得分:0)
希望它可以帮到你
DECLARE @TablesColumns TABLE
(
ID INT IDENTITY,
COLUMN_NAME VARCHAR(50),
TABLE_NAME VARCHAR(50)
)
DECLARE @MinId INT,
@MaxId INT,
@Sql NVARCHAR(MAX),
@TableName VARCHAR(50),
@ColumnName VARCHAR(50)
INSERT INTO @TablesColumns(COLUMN_NAME,TABLE_NAME)--Here we get list of table containing 'centerID'
SELECT COLUMN_NAME,TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME='Credits'
SELECT @MinId=MIN(Id) FROM @TablesColumns
SELECT @MaxId=MAX(Id) FROm @TablesColumns
WHILE (@MinId <=@MaxId)
BEGIN
SELECT @TableName=TABLE_NAME FROm @TablesColumns WHERE Id=@MinId
SELECT @ColumnName=COLUMN_NAME FROm @TablesColumns WHERE Id=@MinId
SET @Sql='DELETE From ' +@TableName+ ' WHERE '+@ColumnName+'=3'
--PRINT @Sql
SET @MinId=@MinId+1
Exec (@Sql)
END