जब मैंने select *SQL Server 2005 में विचारों का उपयोग किया तो मुझे वास्तव में एक अजीब व्यवहार दिखाई दिया ।
निम्नलिखित क्वेरी चलाएँ और आप देखेंगे कि मेरा क्या मतलब है।
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[starTest]') AND type in (N'U'))
DROP TABLE [dbo].[starTest]
CREATE TABLE [dbo].[starTest](
[id] [int] IDENTITY(1,1) NOT NULL,
[A] [varchar](50) NULL,
[B] [varchar](50) NULL,
[C] [varchar](50) NULL
) ON [PRIMARY]
GO
insert into dbo.starTest
select 'a1','b1','c1'
union all select 'a2','b2','c2'
union all select 'a3','b3','c3'
go
IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[vStartest]'))
DROP VIEW [dbo].[vStartest]
go
create view dbo.vStartest as
select * from dbo.starTest
go
go
IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[vExplicittest]'))
DROP VIEW [dbo].[vExplicittest]
go
create view dbo.[vExplicittest] as
select a,b,c from dbo.starTest
go
select a,b,c from dbo.vStartest
select a,b,c from dbo.vExplicitTest
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[starTest]') AND type in (N'U'))
DROP TABLE [dbo].[starTest]
CREATE TABLE [dbo].[starTest](
[id] [int] IDENTITY(1,1) NOT NULL,
[A] [varchar](50) NULL,
[B] [varchar](50) NULL,
[D] [varchar](50) NULL,
[C] [varchar](50) NULL
) ON [PRIMARY]
GO
insert into dbo.starTest
select 'a1','b1','d1','c1'
union all select 'a2','b2','d2','c2'
union all select 'a3','b3','d3','c3'
select a,b,c from dbo.vStartest
select a,b,c from dbo.vExplicittest
अंतिम 2 चुनिंदा कथनों के परिणामों की तुलना करें। मेरा मानना है कि आप जो देखेंगे, वह नाम के बजाय इंडेक्स द्वारा सेलेक्ट * संदर्भित कॉलम का परिणाम है ।
यदि आप दृश्य को फिर से बनाते हैं तो यह फिर से ठीक काम करेगा।
संपादित करें
मैंने एक अलग प्रश्न जोड़ा है, * अधिक विवरण में उस व्यवहार को देखने के लिए SQL सर्वर 2005 में दिलचस्प व्यवहार "बनाम तालिका से" का चयन करें ।