sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2008 データベースのすべてのテーブルで共通の列の最小値と最大値を見つける

    次のようなものが機能するはずです

    DECLARE @C1           AS CURSOR,
            @TABLE_SCHEMA SYSNAME,
            @TABLE_NAME   SYSNAME,
            @HasCreated   BIT,
            @HasUpdated   BIT,
            @MaxDate      DATETIME,
            @MinDate      DATETIME,
            @SQL          NVARCHAR(MAX) 
    
    SET @C1 = CURSOR FAST_FORWARD FOR 
    SELECT TABLE_SCHEMA,
           TABLE_NAME,
           COUNT(CASE
                   WHEN COLUMN_NAME = 'CREATED_DATETIME' THEN 1
                 END) AS HasCreated,
           COUNT(CASE
                   WHEN COLUMN_NAME = 'UPDATED_DATETIME' THEN 1
                 END) AS HasUpdated
    FROM   INFORMATION_SCHEMA.COLUMNS
    WHERE  COLUMN_NAME IN ( 'CREATED_DATETIME', 'UPDATED_DATETIME' )
    GROUP  BY TABLE_SCHEMA,
              TABLE_NAME 
    
    
    OPEN @C1;
    
    FETCH NEXT FROM @C1 INTO @TABLE_SCHEMA , @TABLE_NAME , @HasCreated , @HasUpdated ;
    WHILE @@FETCH_STATUS = 0
    BEGIN
    
    SET @SQL = N'
    SELECT @MaxDate = MAX(D),
           @MinDate = MIN(D)
    FROM   ' + QUOTENAME(@TABLE_SCHEMA) + '.' + QUOTENAME(@TABLE_NAME) + N' 
           CROSS APPLY (VALUES ' + 
                      CASE WHEN @HasCreated = 1 THEN N'(CREATED_DATETIME),' ELSE '' END + 
                      CASE WHEN @HasUpdated = 1 THEN N'(UPDATED_DATETIME),' ELSE '' END + N'
                               (@MaxDate),
                               (@MinDate)) V(D) 
    
    '
    
    EXEC sp_executesql 
        @SQL,
        N'@MaxDate datetime OUTPUT, @MinDate datetime OUTPUT', 
        @MaxDate = @MaxDate OUTPUT, 
        @MinDate = @MinDate OUTPUT
    
      FETCH NEXT FROM @C1 INTO @TABLE_SCHEMA , @TABLE_NAME , @HasCreated , @HasUpdated ;
    END
    
    SELECT @MaxDate AS [@MaxDate], @MinDate AS [@MinDate]
    


    1. PostgreSQLの改行文字

    2. mysqlデータベースのデータを暗号化するにはどうすればよいですか?

    3. PostgreSQLの行から列へ

    4. typescriptからpostgresへの接続がハングする