Sql-server – How to solve index missing problem in one table, while other table of same property does not produce any error

clustered-indexsql-server-2008

enter image description hereTwo databases with same structure at least for my eye. One of them was used as training/testing, where I can add list of products in Art table via a program's extension FDT but not in Art table of another database. The databases have following properties.

EXEC [fakt000].sys.sp_addextendedproperty @name=N'user15', @value=N'sysadmin' 
GO ---Extra line of code in error producing DB, I am using user:sa to  --login






SET COMPATIBILITY_LEVEL = 80


IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [dbo].[sp_fulltext_database] @action = 'disable'
end
GO

common properties in both DB 999 and DB 000

SET ANSI_NULL_DEFAULT OFF
GO

SET ANSI_NULLS OFF 
GO

 SET ANSI_PADDING OFF 
GO

SET ANSI_WARNINGS OFF 
GO

 SET ARITHABORT OFF 
GO

SET AUTO_CLOSE OFF 
GO

SET AUTO_CREATE_STATISTICS ON 
GO
 SET AUTO_SHRINK OFF 
GO

 SET AUTO_UPDATE_STATISTICS ON 
GO

SET CURSOR_CLOSE_ON_COMMIT OFF
GO

SET CURSOR_DEFAULT GLOBAL
GO

 SET CONCAT_NULL_YIELDS_NULL OFF 
GO

 SET NUMERIC_ROUNDABORT OFF 
GO

SET QUOTED_IDENTIFIER OFF 
GO

SET RECURSIVE_TRIGGERS OFF 
GO

 SET  DISABLE_BROKER 
GO

SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO

SET DATE_CORRELATION_OPTIMIZATION OFF 
GO

 SET TRUSTWORTHY OFF 
GO

 SET ALLOW_SNAPSHOT_ISOLATION OFF 
GO

 SET PARAMETERIZATION SIMPLE 
GO

 SET READ_COMMITTED_SNAPSHOT OFF 
GO

 SET HONOR_BROKER_PRIORITY OFF 
GO

 SET  READ_WRITE 
GO

 SET RECOVERY SIMPLE 
GO

SET  MULTI_USER 
GO

SET PAGE_VERIFY TORN_PAGE_DETECTION  
GO

SET DB_CHAINING OFF 
GO

The program generates a error message saying table Art misses index when I use fakt000 as a destination database, while using fakt999 as database I have no problems.
I do have checked the table Products in both the databases seems similar in name of indexes.

To solve this issue I have rebuilt all the indexes in fakt000.dbo.Art still no luck.

I do have change the collation to be similar and again rebuilt all indexes in fakt000.dbo.Art

I do have added same tables in fakt000 but not in fakt999 database. I do not think this would cause any of such error, as error states fakt000.dbo.Art missing index

I have ran profiler to see what commands do the program use and where it may have missed, seems too complex to me, I have enlisted it down,

Select * from version
go
exec sp_provider_types_rowset NULL,NULL
go
exec [Fakt000]..sp_tables_rowset;2 NULL,NULL
go
exec [Fakt000]..sp_indexes_rowset N'Art',NULL,NULL
go
exec [Fakt000]..sp_indexes_rowset N'ArtPris',NULL,NULL
go
SET LOCK_TIMEOUT 10000
go 
select serverproperty(N'instancename') --here seems to arise the problem
go
select ServerProperty('ErrorLogFileName')-- may be here, I am not sure what!
go

                create table #err_log_tmp(ArchiveNo int, CreateDate nvarchar(24), Size int)



            insert #err_log_tmp exec master.dbo.sp_enumerrorlogs



SELECT
er.ArchiveNo AS [ArchiveNo],
CONVERT(datetime, er.CreateDate, 101) AS [CreateDate]
FROM
#err_log_tmp er
ORDER BY
[ArchiveNo] ASC

            drop table #err_log_tmp


go

                create table #err_log_tmp(ArchiveNo int, CreateDate nvarchar(24), Size int)
                insert #err_log_tmp exec master.dbo.sp_enumerrorlogs 2



SELECT
er.ArchiveNo AS [ArchiveNo],
CONVERT(datetime, er.CreateDate, 101) AS [CreateDate]
FROM
#err_log_tmp er
ORDER BY
[ArchiveNo] ASC

            drop table #err_log_tmp


go
select serverproperty(N'instancename')
go
select ServerProperty('ErrorLogFileName')
go
EXEC master.dbo.xp_readerrorlog 0, 1, NULL, NULL, NULL, NULL, N'desc'
go

I am not sure what to do next? to solve it out.
I can insert some products into table using insert but not from program.

Profiler gives me these codes when it successes in test DB fakt999

exec [Fakt999]..sp_tables_rowset;2 NULL,NULL
go
exec [Fakt999]..sp_indexes_rowset N'Art',NULL,NULL
go
exec [Fakt999]..sp_indexes_rowset N'ArtPris',NULL,NULL
go
exec sp_provider_types_rowset NULL,NULL
go
exec [Fakt999]..sp_tables_rowset;2 NULL,NULL
go
exec [Fakt999]..sp_columns_rowset N'Art',NULL,NULL
go
Select * From Art Where Artikelnr='$MALL$'
go
declare @p1 int
set @p1=2
exec sp_prepexec @p1 output,N'@P1 nvarchar(30)'
,N'Select Apris,inpris,Medelpris,Ändrad,Låstinpris,Sortimentstatus
,VariantRadTyp,VariantKolTyp 
from art Where Artikelnr=@P1',N'73974'
select @p1
go
Select * from ArtPris Where Artikelnr='73974'
go
Select * from artlev where artikelnr='73974'
go
UPDATE Art SET ArtikelNr = '73974', RevideradDag = '2013-02-25'
, Ändrad = 9 WHERE ((Artikelnr='73974')) 
go
exec sp_unprepare 2
go

NOTE:The program FDT is a ERP software whose source code or support is out of scope.

*Edit: Sorry I may have been confused myself in writing the name of table in both databases as products instead of **Art**.*

Best Answer

You need to compare the results of these two statements:

exec [Fakt999]..sp_indexes_rowset N'Art',NULL,NULL

exec [Fakt000]..sp_indexes_rowset N'Art',NULL,NULL

A lot of ERP systems have procedures to check the schema to verify that it matches the application metadata about the database so that the queries being generated don't error out. The error that you are saying occurs, isn't one from SQL, it is likely from the application and the difference in results from the above queries is likely what the root cause is.