У меня есть таблица базы данных SQL Server 2012 с столбцами геометрии, и в этой таблице есть один пространственный индекс.Как использовать строковую переменную для подсказки индекса SQL Server?
У меня есть SQL-запрос, который я запускаю для выполнения геопространственного анализа (пересекается/содержит), а производительность выполнения запроса сильно отличается при форсировании использования пространственного индекса и не (который согласно this answer зависит от размера таблицу, которую я использую). Мои таблицы составляют всего 1-2 тыс. Полисов и 1-2 тыс. Точек.
Итак, я использую WITH (INDEX(S7_idx))
в SQL-запросе, где S7_idx
- это имя моего Пространственного индекса.
Однако, когда я буду выполнять этот SQL-запрос в другой базе данных с той же таблицей, индекс Spatial может иметь другое имя. Поэтому я не хочу жестко закодировать имя индекса. Я думаю, было бы здорово, если бы я мог получить динамическое значение индекса, так как я могу быть уверен, что в таблице есть только один пространственный индекс.
select name from sys.indexes where object_id = (select object_id from sys.objects where name = 'TableName') AND type_desc = 'SPATIAL'
Результат:
name S7_idx
Великий. Теперь я хочу использовать это значение вместо жестко заданного имени индекса в операторе WITH
. Как мне это сделать?
Я думаю, что я не могу использовать динамический SQL (с EXECUTE sp_executesql
) внутри своего оператора WITH (INDEX(...))
.
Спасибо, просто что мне нужно. Есть ли другой способ сделать это? У меня довольно волосатый запрос, который является частью хранимой процедуры, и я ненавижу конкатенировать связку строк с кодом SQL ... –