2012-12-04 75 views
-4

如何在创建表本身时使用特定名称创建主键。创建表时使用特定名称创建主键

我想知道我们是否可以创建主键作为表名的一部分,并且同时给它一个名字。尽管对于所有有经验的开发人员来说这看起来都很正常,但对许多开发人员来说仍然很困难

我在做什么错?

CREATE TABLE [dbo].[TestTable]( [ID] [int] IDENTITY(1,1) NOT NULL, [FirstName] [varchar](100) NULL) GO ALTER TABLE [dbo].[TestTable] ADD CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED ([ID] ASC) GO

感谢,马亨德拉

+0

for:http://msdn.microsoft.com/en-us/library/ch45axte.aspx foreach:http://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx – Spontifixus

+0

很多东西是不同的;他们可能会被用来做类似的事情,但可能有很多不同点,因为有相似之处。只要查看每个人所做的事情的定义即可。 – Servy

+1

什么是“C#asp.net?”我不熟悉任何这样的语言。 – cdhowie

回答

4

foreach枚举实现IEnumerableIEnumerable<T>IEnumerator,或IEnumerator<T>(或实际上其类实现一个兼容Current属性和MoveNext()方法的对象)的任何对象。对于foreach的语法是:

foreach (type variable in enumerable) { ... } 

type是新variable变量的类型。 (如果您已经有一个现有的变量可用,则省略该类型)

循环的主体将针对可枚举中的每个对象执行,并且迭代变量(此处为variable)将包含每次迭代中的对象。

for是更通用的,并遵循这个模式:

for (initial-statements; loop-condition; post-iteration-actions) { 
    body 
} 

这几乎完全等同于:

initial-statements 
while (loop-condition) { 
    body 
    post-iteration-actions 
} 

与数组打交道时,您可能会看到一个for循环,对例如:

for (int index = 0; index < array.Length; index++) { 
    Console.WriteLine(array[index]); 
} 

这是一样的事情:

{ 
    int index = 0; 
    while (index < array.Length) { 
     Console.WriteLine(array[index]); 
     index++; 
    } 
} 

(请注意,使用foreach超过阵列是由编译器优化,以使用类似的基于索引的迭代中,因为这是更快的。所以枚举数组时,这三种方法应该具有同等性能和运行时语义)


更多信息,如果你想让它:

foreach实际上只是语法糖,并可以很容易地转换成while循环。

foreach (object x in y) { 
    Console.WriteLine(x); 
} 

这实际上意味着:

var enumerator = y.GetEnumerator(); 
try { 
    object x; // See footnote 1 
    while (enumerator.MoveNext()) { 
     x = enumerator.Current; 
     Console.WriteLine(x); 
    } 
} finally { 
    ((IDisposable)enumerator).Dispose(); 
} 

除将enumerator变量没有名称,是不可见的。

这很明显,为什么foreach存在。无论你今天使用它,否则你将不得不编写这个可怕的详细样板代码。 foreach照顾你的一切 - 抓取一个枚举器,在每次迭代中测试MoveNext(),提取枚举器的当前值,并在迭代完成后处置枚举器。

该变量实际上是semantically declared inside of the loop, starting with C# 5。这个例子对于C#4和前辈是准确的。

0

foreach用在集合来遍历的顶部,而for可以在任何为同一目的而使用。

+1

实际上,任何带迭代器的东西都可以和foreach一起使用,更具体。 –

0

的foreach使用迭代器,用于使用索引

所以

foreach(var item in myCollection) 
{ 
    Console.WriteLine(item); 
} 

for(int i = 0; i< myCollection.Count; i++) 
{ 
    Console.WriteLine(myCollection[i]); 
} 

所以,如果这些人被称为PrintContent功能的肉,一会带什么实现IEnumerable另一个参数必须有一个count属性和实现和索引器类型的整数。当你对混合进行排序和过滤时,它会变得更加有趣,这完全取决于抽象,PrintContent不需要知道myCollection是如何实现的,只是myCollection实现了IEnumerable。