2011-02-11 7 views
8

मेरे पास एक बहुत लंबी संग्रहीत प्रक्रिया में निम्न कोड है, जहां पी उत्पाद तालिका के बराबर है:एसक्यूएल सर्वर: मैं उपसर्ग के साथ तालिका से सबकुछ कैसे चुन सकता हूं?

SELECT 
P.*, 
etc1, 
etc2 

जो मुझे "productID" और इसी तरह देगा।

मैं इसे उपसर्ग के साथ चुनना चाहता हूं जैसे:

SELECT 
P.* AS P_*, 
etc1, 
etc2 

जो मुझे "P_ProductID" और इसी तरह देगा।

क्या यह संभव है?

+0

कोई अन्य विकल्प जिसका उल्लेख नहीं किया गया था, सही आकार के साथ एक दृश्य बना रहा है और –

उत्तर

15

जब तक आप गतिशील एसक्यूएल का उपयोग नहीं करते हैं। हालांकि ऐसी चीज की आवश्यकता बहुत असामान्य है, क्या आपको यकीन है कि आपको इसकी आवश्यकता है?

कार्य उदाहरण

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 
+0

+1 से चयन कर रहा है, लेकिन ... मैं आलसी होने की तुलना में P_ * का उपयोग करने के लिए कोई अन्य कारण नहीं देख सकता। और आप उन्हें इसका उपयोग करने में लुभाने का मानते हैं ?! :) –

+5

@Andriy आप 7 के स्कोर को रैंकिंग और गिनती के सवाल को देखते हैं ?! मैं नहीं पूछता कि आप रस्सी क्यों चाहते हैं। आप पूछते हैं, मैं देता हूँ :) – RichardTheKiwi

0

मेरा मानना ​​है कि 'के रूप में' केवल एक स्तंभ पर लागू होता है। मुझे यकीन है कि आप अपने कोड में कॉलम हेडर पर 'P_' प्रीपेड कर सकते हैं।

2

यदि आप सभी कॉलम अलग से सूचीबद्ध करते हैं तो आप इसे कर सकते हैं।

कॉलम उपनाम वाइल्डकार्ड के साथ नहीं किया जा सकता है।

यदि पी। * एक बहुत लंबी सूची है और शेष केवल कुछ कॉलम हैं तो 'बाकी' का नाम बदलना बेहतर होगा और जैसा कि यह है।

संबंधित मुद्दे