2011-02-11 3 views
8

P가 Products 테이블과 같은 매우 긴 저장 프로 시저에서 다음 코드를 사용합니다.SQL Server : 접두사가있는 테이블에서 모든 것을 선택하려면 어떻게합니까?

SELECT 
P.*, 
etc1, 
etc2 

그러면 "ProductID"가 표시됩니다.

다음과 같은 접두어로 선택하고 싶습니다.

SELECT 
P.* AS P_*, 
etc1, 
etc2 

그러면 "P_ProductID"가 표시됩니다.

가능합니까?

+0

언급되지 않은 또 다른 옵션은 올바른 모양의보기를 만들고 그 중에서 선택하는 것입니다. –

답변

15

동적 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) 

출력 :

하나 개의 컬럼에 적용 'AS'내가 믿는
P_ProductID P_Price    P_Description OrderID  Qty 
----------- --------------------- ------------- ----------- ----------- 
1   12.30     apples  11   2 
2   2.40     bananas  11   4 
+0

+1,하지만 ... 게으름 피우는 것보다 P_ *를 사용하고자하는 다른 이유는 없습니다. 그리고 당신은 이것을 사용하도록 그들을 유혹한다고 생각하니? :) –

+5

@ 안드리 당신은 7 점을 세며 세는 질문을 봅니다. 나는 왜 밧줄을 원 하냐고 묻지 않는다. 당신이 물어, 내가 줄 :) – RichardTheKiwi

0

. 코드의 열 머리글 앞에 'P_'를 추가 할 수 있습니다.

2

모든 열을 개별적으로 나열 할 수 있습니다.

와일드 카드로 열 별칭을 사용할 수 없습니다.

p. *가 매우 긴 목록이고 나머지는 몇 개의 열만있는 경우 '나머지'의 이름을 바꾸고 p. *를 그대로 두는 것이 좋습니다.

관련 문제