- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/db/mssqldbconnection.php
- Класс: BitrixMainDBMssqlDbConnection
- Вызов: MssqlDbConnection::getIndexName
public function getIndexName($tableName, array $arColumns, $strict = false)
{
if (!is_array($arColumns) || count($arColumns) <= 0)
return null;
//2005
//$rs = $this->query("SELECT index_id, COL_NAME(object_id, column_id) AS column_name, key_ordinal FROM SYS.INDEX_COLUMNS WHERE object_id=OBJECT_ID('".$this->forSql($tableName)."')", true);
//2000
$rs = $this->query(
"SELECT s.indid as index_id, s.keyno as key_ordinal, c.name column_name, si.name index_name ".
"FROM sysindexkeys s ".
" INNER JOIN syscolumns c ON s.id = c.id AND s.colid = c.colid ".
" INNER JOIN sysobjects o ON s.id = o.Id AND o.xtype = 'U' ".
" LEFT JOIN sysindexes si ON si.indid = s.indid AND si.id = s.id ".
"WHERE o.name = UPPER('".$this->getSqlHelper()->forSql($tableName)."')");
$arIndexes = array();
while ($ar = $rs->fetch())
$arIndexes[$ar["index_name"]][$ar["key_ordinal"] - 1] = $ar["column_name"];
$strColumns = implode(",", $arColumns);
foreach ($arIndexes as $key => $keyColumn)
{
ksort($keyColumn);
$strKeyColumns = implode(",", $keyColumn);
if ($strict)
{
if ($strKeyColumns === $strColumns)
return $key;
}
else
{
if (substr($strKeyColumns, 0, strlen($strColumns)) === $strColumns)
return $key;
}
}
return null;
}