Verificar erros nas tabelas e campos de usuário no SAP

Dicas que peguei no site da SAP para verificar possiveis erros nas tabelas/campos de usuários:
  • User Data Table (Tabela de usuário) - UDT
  • User Data File  (Campo de usuário) - UDF
1) Verificar se UDT foi definido no SAP mas não foi criada a tabelas:

SELECT TableName FROM OUTB WHERE NOT EXISTS (SELECT 1 FROM sysobjects WHERE xtype='U' AND [name]='@'+TableName)

2) Verificar se UDT não foi registrado:

SELECT * FROM sysobjects WHERE [name] LIKE '@%' AND name NOT IN (SELECT '@'+tablename FROM outb UNION ALL SELECT '@'+logtable FROM outb WHERE logtable is NOT NULL) AND xtype='U'

3) UDF foi definido, mas não registrado no UDT:

SELECT T0.TableID FROM CUFD T0 WHERE left(T0.TableID,1)='@'  AND NOT EXISTS (SELECT 1 FROM  OUTB T1 WHERE '@'+T1.TableName = T0.TableID or '@'+T1.LogTable = T0.TableID

4) UDF foi definido, mas não existe:

SELECT TableID, AliasID FROM 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) Verifica se UDF tem propriedades definida para UDF não exitente.
UDF valores válidos são definidos para UDF não-existente:

SELECT TableId, FieldID FROM UFD1 T WHERE NOT EXISTS (SELECT 1 FROM CUFD WHERE TableId=T.TableId AND FieldID=T.FieldID)

6) UDF não corresponde ao padrão:

SELECT T1.UDF, T0.nvarchar_size as 'act_size', T1.nvarchar_size as 'def_size' FROM (SELECT T2.name + '.' + T3.name as 'UDF', T3.length/2 as 'nvarchar_size' FROM sysobjects T2 INNER JOIN syscolumns T3 ON T2.id=T3.id WHERE T2.xtype='U' AND T3.xtype IN (SELECT xtype FROM systypes WHERE [name]='nvarchar')) T0

7a) UDF contém espaços extras em TableID campo em campos Usuário na mesma descrição da tabela CUFD:

SELECT * FROM CUFD WHERE  datalength(TableID)<>LEN(TableID) AND  ascii(SUBSTRING (TableID, LEN(TableID)+1, 1)) =32

7b) UDF contém espaços extras em campo AliasID em campos de usuário na mesma descrição CUFD:

SELECT * FROM CUFD WHERE  datalength(AliasID)<>len(AliasID) AND  ascii(SUBSTRING (AliasID, LEN(AliasID)+1, 1)) =32

8) UDF existe, mas não está definido:
SELECT T1.name [Table name], T0.name [Column name] FROM sys.columns T0 JOIN sys.objects T1 ON T0.object_id = T1.object_id left JOIN CUFD  T2 ON T2.TableID = T1.name AND ('U_' + T2.AliasID) = T0.name WHERE T1.type = 'U' AND T0.name LIKE 'U/_%' escape '/' AND ('U_' + T2.AliasID) is NULL AND (T0.name !='U_NAME' AND T1.name NOT IN ('OUSR', 'AUSR'))

Comentários

Postagens mais visitadas