SQL Server:在整个数据库

时间:2017-04-28 04:35:00

标签: sql sql-server sql-server-2008

我有一个像这样的表格中心

| 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

提前致谢!

2 个答案:

答案 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