none
Trovare colonne autoIncrementanti RRS feed

  • Domanda

  • Ciao a tutti, mi aiutate a mettere a punto uno script che trovi tutte le colonne auto incrementanti nelle tabelle di un db (sqlserver ovviamente) ne indichi il tipo e il valore massimo raggiunto

    Ho trovato questo come punto di partenza, ma come ci trovo il resto ?

    select * from sys.columns as c
    where c.is_identity=1

    ciao grazie

    lunedì 18 novembre 2013 10:30

Risposte

  • grazie Emiliano, ho trovato questa che fà proprio al caso mio

    WITH CTE_1
    AS
    (
      SELECT OBJECT_NAME(a.Object_id) as table_name,
             a.Name as columnname,
             CONVERT(bigint, ISNULL(a.last_value,0)) AS last_value,
             Case
                  When b.name = 'tinyint'   Then 255
                  When b.name = 'smallint'  Then 32767
                  When b.name = 'int'       Then 2147483647
                  When b.name = 'bigint'    Then 9223372036854775807
                End As dt_value
        FROM sys.identity_columns a
       INNER JOIN sys.types As b
          ON a.system_type_id = b.system_type_id
    ),
    CTE_2
    AS
    (
    SELECT *,
           CONVERT(Numeric(18,2), ((CONVERT(Float, last_value) / CONVERT(Float, dt_value)) * 100)) AS "Percent"
      FROM CTE_1
    )
    SELECT *
      FROM CTE_2
     ORDER BY "Percent" DESC;

    lunedì 18 novembre 2013 10:43

Tutte le risposte

  • Ciao,

    io proverei così:

    select c.name, TYPE_NAME(system_type_id), max_length, s.max_column_id_used 
    from sys.columns as c inner join sys.tables as s on s.object_id = c.object_id 
    where c.is_identity=1

    Spero di esserti stato di aiuto


    Emiliano Musso

    lunedì 18 novembre 2013 10:37
  • grazie Emiliano, ho trovato questa che fà proprio al caso mio

    WITH CTE_1
    AS
    (
      SELECT OBJECT_NAME(a.Object_id) as table_name,
             a.Name as columnname,
             CONVERT(bigint, ISNULL(a.last_value,0)) AS last_value,
             Case
                  When b.name = 'tinyint'   Then 255
                  When b.name = 'smallint'  Then 32767
                  When b.name = 'int'       Then 2147483647
                  When b.name = 'bigint'    Then 9223372036854775807
                End As dt_value
        FROM sys.identity_columns a
       INNER JOIN sys.types As b
          ON a.system_type_id = b.system_type_id
    ),
    CTE_2
    AS
    (
    SELECT *,
           CONVERT(Numeric(18,2), ((CONVERT(Float, last_value) / CONVERT(Float, dt_value)) * 100)) AS "Percent"
      FROM CTE_1
    )
    SELECT *
      FROM CTE_2
     ORDER BY "Percent" DESC;

    lunedì 18 novembre 2013 10:43