0

我正在阅读初学者 ASP.NET MVC 4,我必须使用 T-SQL 创建一些表。到目前为止一切正常,但是当我尝试在 T-SQL 编辑器中复制它时(在 Visual Studio 2012 中)

ALTER TABLE [dbo].[UserProfile] 
ADD
[FirstName] VARCHAR(150) NOT NULL,
[LastName] VARCHAR(150) NOT NULL,
[Email] VARCHAR(150) NOT NULL;

错误是:

在这种情况下,您必须使用 CREATE TABLE 而不是使用 ALTER TABLE 语句来指定列

在其他表中,我有以下代码:

...
REFERENCES **[UserProfile]** ([UserId])
...

但书中没有 [UserProfile] 表。
有人可以帮我ALTER TABLE吗?

4

4 回答 4

1

ALTER TABLE仅当该表存在于数据库中时才有效。

如果您说没有UserProfile表,那么您应该使用以下命令创建它:

CREATE TABLE [dbo].[UserProfile] (
  [FirstName] VARCHAR(150) NOT NULL,
  [LastName] VARCHAR(150) NOT NULL,
  [Email] VARCHAR(150) NOT NULL
)
于 2013-08-27T09:16:40.147 回答
0

首先检查表是否存在,如果不存在则创建。

IF NOT EXISTS (SELECT 1 FROM sys.tables WHERE [object_id] = OBJECT_ID(N'dbo.UserProfile', N'U'))
BEGIN
    CREATE TABLE [dbo].[UserProfile] (
          [FirstName] VARCHAR(150) NOT NULL,
          [LastName] VARCHAR(150) NOT NULL,
          [Email] VARCHAR(150) NOT NULL
        )
END

然后检查您需要的每个单独的列是否存在并处理这些

IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE [name] = 'FirstName' AND [object_id] = OBJECT_ID(N'dbo.UserProfile', N'U'))
BEGIN
    ALTER TABLE dbo.UserProfile 
        ADD [FirstName] VARCHAR(150) NOT NULL
END

IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE [name] = 'LastName' AND [object_id] = OBJECT_ID(N'dbo.UserProfile', N'U'))
BEGIN
    ALTER TABLE dbo.UserProfile 
        ADD LastName VARCHAR(150) NOT NULL
END

IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE [name] = 'Email' AND [object_id] = OBJECT_ID(N'dbo.UserProfile', N'U'))
BEGIN
    ALTER TABLE dbo.UserProfile 
        ADD Email VARCHAR(150) NOT NULL
END
于 2013-08-28T22:36:06.003 回答
0

[UserId] 列应在 ALTER TABLE 之前创建。而这里的 Alter Table 只是添加列 [FirstName]、[LastName] 和 [Email]。

于 2013-08-27T10:09:08.087 回答
0

如果您在 Visual Studio 中看到此内容,请确保您的脚本文件未包含在构建中,右键单击 .sql 文件并查看属性,将“构建操作”设置为无。这将摆脱错误。这个错误破坏了 Jenkins 的构建,这个解决方案为我解决了这个问题。

于 2019-05-17T01:20:33.133 回答