User-Defined Table (UDT) and User-Defined Field (UDF) related issues often have different behaviors. This note provides a few generic queries to detect some common issues about UDT & UDF. If an issue is related to UDT & UDF, the queries provided bellow will detect the inconsistencies known.
Description of the bug: | 1) UDT is defined but does not exist. |
/*1) UDT is defined but does not exist.*/ select TableName from OUTB /*2) UDF is not registered.*/ select * from sysobjects where [name] like '@%' and name not in /*3) UDF is defined on an unregistered UDT.*/ select T0.TableID from CUFD T0 where left(T0.TableID,1)='@' and /*4) UDF is defined but does not exist.*/ select TableID, AliasID from CUFD where not exists ( /*5) UDF valid values are defined for non-existing UDF.*/ select TableId, FieldID from UFD1 T /*6) UDF definition does not match actuality.*/ select T1.UDF, T0.nvarchar_size as 'act_size', T1.nvarchar_size as 'def_size' from ( /*7a) UDF contains extra spaces in field TableID in User-fields description CUFD table.*/ select * from CUFD /*7b) UDF contains extra spaces in field AliasID in User-fields select * from CUFD /*😎 UDF exists but is not defined*/ select T1.name, T0.name from sys.columns T0 join sys.objects T1 on T0.object_id = T1.object_id |
Update Query with description:
/*1)Below query will delete all users defined tables which are defined but not exist in SQL Server.*/
delete OUTB where '@'+TableName not in (
select name from sysobjects where xtype='U'
)
/* 2 ) We recommend to remove the tables displayed by the query from the database directly in the database interface. Please consider this solution according to your customization. */
/*3) Below query will delete all users defined fields which are defined on an unregistered UDT.*/
delete from CUFD where left(TableID,1)='@' and not exists (
select 1 from OUTB where '@'+TableName = TableID or
'@'+LogTable = TableID)
/*4) Below query will delete all users defined fields which are defined but not exist in SQL Server.*/
delete CUFD where not exists (
select t0.name, t1.name
from sysobjects t0 inner join syscolumns t1
on t0.xtype='U' and t0.id=t1.id
where t0.name=TableID and t1.name='U_'+AliasID)
and TableID not in ('BTNT', 'OIBT', 'OSRI', 'SRNT')
/*5) Below query will delete all users defined fields' valid values which are defined for non-exist UDF.*/
delete UFD1 where not exists (
select 1 from CUFD where TableId=UFD1.TableId and FieldID=UFD1.FieldID
)
/*6) Update the size of the UDF in Application.*/
/*7)Below query will trim extra spaces in the table name. */
/*7a) extra spaces in TableID of CUFD:*/
update CUFD
set TableID = replace (TableID,' ', '') where datalength(TableID)<> LEN
(TableID) and ascii(SUBSTRING (TableID, LEN(TableID)+1, 1)) =32
/*7b) extra spaces in AliasID of CUFD:*/
update CUFD
set AliasID = replace (AliasID,' ', '') where datalength(AliasID)<> LEN
(AliasID) and ascii(SUBSTRING (AliasID, LEN(AliasID)+1, 1)) =32
/*😎 We recommend to remove the columns displayed by the query from the database directly in the database interface. Please consider this solution according to your customization.*/
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
4 | |
3 | |
3 | |
3 | |
2 | |
2 | |
2 | |
2 | |
1 | |
1 |