#sql #sql-server #xml #tsql
#sql #sql-сервер #xml #tsql
Вопрос:
У меня есть следующая таблица (называемая temp1):
------- ------ ------ ------ ----------------------
| cntry | col1 | col2 | col3 | ACV Distribution (w) |
------- ------ ------ ------ ----------------------
| UK | 100 | 100 | 100 | 0 |
| FR | 100 | 100 | 100 | 0 |
------- ------ ------ ------ ----------------------
При выполнении этого оператора:
DECLARE @listStr varchar(MAX);
DECLARE @query varchar(MAX);
drop table if exists temp2 ;
set @liststr = ( select * from temp1 where cntry = 'UK' for xml path('') )
set @query =('SELECT top 10 col1,col2,col3,' @listStr ' INTO temp2 FROM temp3' )
execute(@query);
SELECT * FROM temp2 ;
Я получаю эту ошибку:
ОШИБКА: имя столбца ACV Distribution (w) содержит недопустимый XML-идентификатор, требуемый для XML
Я застрял здесь, так как не могу изменить имя столбцов и должен использовать динамический sql.
Комментарии:
1. Используйте
quotename()
.2. могу ли я использовать quotename для *, потому что в соответствии с определением я поместил строку и quote_character
3. Вам нужно изменить имя столбца, чтобы оно стало допустимым именем элемента SQL… Нравится
SELECT ..., [ACV Distribution (w)] AS ACV_Distribution_w
4. @SalmanA не может изменить имя столбца, в моем случае они стандартные
5. что здесь temp3? Не используя ваш текущий подход, можете ли вы объяснить, каковы фактические требования? Возможно, могут быть другие подходы к решению…