Как я Верчусь вокруг XML атрибуты столбца в T-SQL

Я недавно просто записал свою собственную систему перезаписи, чтобы заставить URL на моих сайтах выглядеть лучше. В основном Вы собираетесь должны записать свое собственное IHttpModule и добавить его к Вашему web.config для прерывания входящих запросов. Можно тогда использовать HttpContext. Текущий. RewritePath для изменения то, на что Вы указываете.

Вы также захотите настроить свой сайт к , используют aspnet_isapi для всего .

Вы обнаружите много небольших проблем по пути как попытка работать со страницами, которые используют "хвосты" на них (как для PageMethods), или соединение каналом элементов страницы и обратные передачи формы, но Вы пройдете через них.

, Если заинтересовано, я могу отправить ссылку на код, и можно проверить его. Я уже разработал много проблем, таким образом, можно прочитать его, когда Вы идете. Я уверен, что существует много других людей, которые сделали это также, которое могло бы быть хорошими ресурсами также.

6
задан OMG Ponies 16 October 2009 в 19:59
поделиться

2 ответа

Взгляните на эту динамическую опорную точку и недавно на эту - вам в основном необходимо иметь возможность ВЫБРАТЬ DISTINCT FieldName , чтобы использовать эту технику для динамического построения вашего запроса.

Вот полный ответ на вашу конкретную проблему (обратите внимание, что при создании списка из различных атрибутов существует слабость порядка столбцов, зная, в каком порядке должны отображаться столбцы):

DECLARE @template AS varchar(MAX)
SET @template = 'SELECT 
    FormEntryId
    ,{@col_list}
    ,DateCreated 
FROM FormEntry'

DECLARE @col_template AS varchar(MAX)
SET @col_template = 'FormXML.value(''/Root[1]/Form[1]/FormData[@FieldName="{FieldName}"][1]/@FieldValue'',''varchar(max)'') AS {FieldName}'

DECLARE @col_list AS varchar(MAX)

;WITH FieldNames AS (
    SELECT DISTINCT FieldName
    FROM FormEntry
    CROSS APPLY (
        SELECT X.FieldName.value('@FieldName', 'varchar(255)')
        FROM FormXML.nodes('/Root[1]/Form[1]/FormData') AS X(FieldName)
    ) AS Y (FieldName)
)
SELECT @col_list = COALESCE(@col_list + ',', '') + REPLACE(@col_template, '{FieldName}', FieldName)
FROM FieldNames

DECLARE @sql AS varchar(MAX)
SET @sql = REPLACE(@template, '{@col_list}', @col_list)

EXEC (@sql)
4
ответ дан 17 December 2019 в 04:48
поделиться

Динамический поворот не встроен в язык по уважительной причине. Прежде чем станет известна структура результата, необходимо просканировать всю таблицу, содержащую потенциальные имена столбцов. В результате структура таблицы динамического оператора поворота будет неизвестна до времени выполнения. Это создает много проблем, связанных с синтаксическим анализом и интерпретацией языка.

Если вы решите реализовать динамический поворот самостоятельно, не упустите возможности внедрения SQL. Обязательно примените QUOTENAME или эквивалент к значениям, которые вы планируете использовать в качестве имен столбцов в вашем результате. Также подумайте, какой результат вы хотите получить, если количество различных значений в вашем источнике, которые станут именами столбцов, превышает допустимое количество столбцов в наборе результатов.

1
ответ дан 17 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: