Я использовал профилировщик SQL, чтобы выяснить какие-либо различия, и получил эти результаты.
мой код:
exec [MyDatabase].[sys].sp_columns_100 N'MyTable',N'sys',N'MyDatabase',NULL,@fUsePattern=1
MS Access:
exec [sys].sp_columns_100 N'MyTable',N'dbo',NULL,NULL,@fUsePattern=1
ИтакЯ изменил параметры для SQLColumns (), чтобы предоставить только имя таблицы и больше не базу данных и владельца.
старый код:
SQLColumns(m_hstmt,
(UCHAR FAR *)(const char*)m_strQualifierParam,
SQL_NTS,
(UCHAR FAR *)(const char*)m_strOwnerParam,
SQL_NTS,
(UCHAR FAR *)(const char*)m_strTableNameParam,
SQL_NTS,
NULL,
SQL_NTS)
новый код:
SQLColumns(m_hstmt,
(UCHAR FAR *)NULL,
SQL_NTS,
(UCHAR FAR *)NULL,
SQL_NTS,
(UCHAR FAR *)(const char*)m_strTableNameParam,
SQL_NTS,
NULL,
SQL_NTS)
Теперь при использовании моего нового кода результат профилировщика выглядит так:
exec [sys].sp_columns_100 N'MyTable',NULL,NULL,NULL,@fUsePattern=1
И это работает.Он также работает для MS Access и PostgreSQL.