• Модуль: 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;
}