Today I was looking for a field in a SQL Server 2000 database which had lots of tables. I knew the name of the field, but I didn't know the table name. So I modified the code contained in master.dbo.sp_columns to find it. It turns out that in my case, I was looking for a field that didn't exist. Hopefully you'll have better luck.
To use this, replace the words your field here in the next-to-last line.
      
        SELECT
            TABLE_QUALIFIER = convert(sysname,DB_NAME()),
            TABLE_OWNER = convert(sysname,USER_NAME(o.uid)),
            TABLE_NAME = convert(sysname,o.name),
            COLUMN_NAME = convert(sysname,c.name),
            d.DATA_TYPE,
            convert (sysname,case
                when t.xusertype > 255 then t.name
                else d.TYPE_NAME collate database_default
            end) TYPE_NAME,
            convert(int,case
                when d.DATA_TYPE in (6,7) then d.data_precision         /* FLOAT/REAL */
                else OdbcPrec(c.xtype,c.length,c.xprec)
            end) "PRECISION",
            convert(int,case
                when type_name(d.ss_dtype) IN ('numeric','decimal') then    /* decimal/numeric types */
                    OdbcPrec(c.xtype,c.length,c.xprec)+2
                else
                    isnull(d.length, c.length)
            end) LENGTH,
            SCALE = convert(smallint, OdbcScale(c.xtype,c.xscale)),
            d.RADIX,
            NULLABLE = convert(smallint, ColumnProperty (c.id, c.name, 'AllowsNull')),
            REMARKS = convert(varchar(254),null),    /* Remarks are NULL */
            COLUMN_DEF = text,
            d.SQL_DATA_TYPE,
            d.SQL_DATETIME_SUB,
            CHAR_OCTET_LENGTH = isnull(d.length, c.length)+d.charbin,
            ORDINAL_POSITION = convert(int,
                       (
                        select count(*)
                        from syscolumns sc
                        where sc.id     =  c.id
                          AND sc.number =  c.number
                          AND sc.colid  <= c.colid
                        )),
            IS_NULLABLE = convert(varchar(254),
                substring('NO YES',(ColumnProperty (c.id, c.name, 'AllowsNull')*3)+1,3)),
            SS_DATA_TYPE = c.type
        FROM
            sysobjects o,
            master.dbo.spt_datatype_info d,
            systypes t,
            syscolumns c
            LEFT OUTER JOIN syscomments m on c.cdefault = m.id
                AND m.colid = 1
        WHERE
--            o.id = @table_id
            c.id = o.id
            AND t.xtype = d.ss_dtype
            AND c.length = isnull(d.fixlen, c.length)
            AND (o.type not in ('P', 'FN', 'TF', 'IF') OR (o.type in ('TF', 'IF') and c.number = 0))
            AND isnull(d.AUTO_INCREMENT,0) = isnull(ColumnProperty (c.id, c.name, 'IsIdentity'),0)
            AND c.xusertype = t.xusertype
            AND c.name like '%your field here%'
No comments:
Post a Comment