创建表时使用特定名称创建主键

时间:2012-12-04 18:25:24

标签: c# sql sql-server database

创建表本身时如何创建具有特定名称的主键。

我想知道我们是否也可以创建主键作为表名的一部分,同时也为它命名。尽管对所有经验丰富的开发人员来说这看起来很正常,但对许多人来说仍然会让人感到困惑。

我做错了什么?

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

谢谢,马亨德拉

3 个答案:

答案 0 :(得分:4)

foreach枚举实现IEnumerableIEnumerable<T>IEnumeratorIEnumerator<T>的任何对象(或实际上任何其类实现兼容{{1}的对象属性和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,提取枚举器的当前值,并在迭代完成后处理枚举器。

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

答案 1 :(得分:0)

foreach用于遍历集合,而for可用于任何目的。

答案 2 :(得分: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。