SQL Server: как я могу выбрать все из таблицы с префиксом? - PullRequest
9 голосов
/ 11 февраля 2011

У меня есть следующий код в очень длинной хранимой процедуре, где P равен таблице Products:

SELECT
P.*,
etc1,
etc2

Что даст мне "ProductID" и т. Д.

Я хотел бы выбрать его с префиксом, таким как:

SELECT
P.* AS P_*,
etc1,
etc2

Что даст мне "P_ProductID" и т. Д.

Возможно ли это сделать?

Ответы [ 3 ]

15 голосов
/ 11 февраля 2011

Нет, если вы не используете динамический SQL.Впрочем, очень редко требуется такая вещь, вы уверены, что она вам нужна?

Рабочий пример

create table Products (ProductID int, Price money, Description varchar(10));
insert Products select 1, 12.3, 'apples'
insert Products select 2, 2.4, 'bananas'
create table OrderDetails (OrderID int, ProductID int, Qty int)
insert into OrderDetails select 11,1, 2
insert into OrderDetails select 11,2, 4

declare @sql nvarchar(max)
select @sql = coalesce(@sql+',','') +
    'P.' + QuoteName(Column_name) + ' as ' + QuoteName('P_' + Column_name)
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'Products'
order by ORDINAL_POSITION
set @sql = '
select ' + @sql + ', O.OrderID, O.Qty
from Products P
inner join OrderDetails O on P.ProductID = O.ProductID
'
--print @sql   :: uncomment if you need to see it
exec (@sql)

Вывод:

P_ProductID P_Price               P_Description OrderID     Qty
----------- --------------------- ------------- ----------- -----------
1           12.30                 apples        11          2
2           2.40                  bananas       11          4
2 голосов
/ 11 февраля 2011

Вы можете сделать это, если перечислите все столбцы отдельно.

Псевдоним столбца не может быть сделан с подстановочным знаком.

Если p. * Очень длинный список, а остальные - только несколько столбцов, может быть лучше переименовать 'rest' и оставить p. * Как есть.

0 голосов
/ 11 февраля 2011

Я считаю, что «КАК» относится только к одному столбцу. Я уверен, что вы можете добавить 'P_' к заголовку столбца в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...