ALTER TABLE约束问题

时间:2011-08-09 13:10:29

标签: sql-server primary-key constraints

我正在尝试运行以下SQL语句:

IF OBJECT_ID('MyTable') IS NOT NULL
    DROP TABLE MyTable

SELECT
    a.UserId
INTO
    MyTable
FROM
    UsersTable a
WHERE
    a.UserId='12359670-1DC9-4A0A-8AE5-29B664C1A57E'


ALTER TABLE MyTable ALTER COLUMN UserId UNIQUEIDENTIFIER NOT NULL
ALTER TABLE MyTable ADD PRIMARY KEY(UserId) 

但是,我收到以下错误: 无法在表'MyTable'中的可空列上定义PRIMARY KEY约束。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

这假设SQL Server基于UNIQUEIDENTIFIER

介于之间(或相关批处理分隔符,如果不是SQL Server)

....
ALTER TABLE MyTable ALTER COLUMN UserId UNIQUEIDENTIFIER NOT NULL
GO
ALTER TABLE MyTable ADD PRIMARY KEY(UserId)

在批处理编译时,该列可以为空。所以分手批次。

SQL不是一行一行的程序语言

您必须在存储过程中执行此操作

ALTER TABLE MyTable ALTER COLUMN UserId UNIQUEIDENTIFIER NOT NULL
EXEC('ALTER TABLE MyTable ADD PRIMARY KEY(UserId)')

答案 1 :(得分:0)

找到解决方案。 我正在使用以下声明:

EXEC sp_ExecuteSQL N'ALTER TABLE MyTable ALTER COLUMN UserId UNIQUEIDENTIFIER NOT NULL'
EXEC sp_ExecuteSQL N'ALTER TABLE MyTable ADD PRIMARY KEY(UserId)'

答案 2 :(得分:0)

您不需要动态SQL。只需先创建表格和密钥。

CREATE TABLE MyTable (UserId UNIQUEIDENTIFIER NOT NULL PRIMARY KEY);

INSERT INTO MyTable (UserId)
SELECT UserId
FROM UsersTable
WHERE UserId='12359670-1DC9-4A0A-8AE5-29B664C1A57E';
相关问题