0

Microsoft Access 允许我将字段输入值限制为一些预先确定的值,例如“ Apple”、“ Orange”、“ Tomato”,甚至像1,之类的整数2 215

基本上,它将表格单元格从 TextBox 转换为 ComboBox,并允许用户从 ComboBox 中选择有效值。

如何在 SQL Server Management Studio (2008 R2 Express) 中执行此操作?我通过单击表格并单击“编辑前 200 行”来输入数据。

谢谢。

更新:

到目前为止对我来说最简单的检查:

在对象资源管理器中,展开表,右键单击“约束”,单击“新建约束...”,如果需要,重命名约束,输入表达式:

([name]='Orange' OR [name]='Apple' OR [name]='Tomato')

其中“name”是列的名称,“Orange”、“Apple”和“Tomato”是有效值。我认为你必须使用单引号。

单击“关闭”,文件 | 保存全部

如果与新约束有任何冲突,您必须先解决它们,然后它才能让您保存。

现在,我想要一个组合框!;)

输入错误数据并使其无法通过检查的一个令人讨厌的结果是,主键无论如何都会增加,并且您的数字存在差距。

4

2 回答 2

1

您可以使用checkSQL Server 中的约束来执行此操作:

alter table t
    add constraint CHK_column_values check (column in ('value1', 'value2'));

如果您尝试分配表达式column in ('value1', 'value2')未计算为 true 的值,则insert/update失败。

该表达式不能包含对其他表的引用。但是,它可以包含一个用户定义的函数,该函数可以反过来检查另一个表。

编辑:

我最初离开check了上面的表达式。表格和值的形式:

alter table <your table name here>
    add constraint CHK_column_values check ([name] in ('Apple', 'Orange', 'Tomato'));

这就是 SSMS 工作室在您使用菜单选项时所做的事情。

于 2013-07-13T23:05:40.863 回答
1

表定义中的检查约束将限制允许的值。 http://msdn.microsoft.com/en-us/library/ms190377.aspx

IF OBJECT_ID('tempdb..#temp','U') IS NOT NULL DROP TABLE #temp;

CREATE TABLE #temp
(
    id int NOT NULL IDENTITY PRIMARY KEY
    ,name VARCHAR(50)
    CONSTRAINT CHK_name
    CHECK (name = 'Orange' OR name = 'Apple' OR name = 'Tomato')
)

INSERT INTO #temp(name)
VALUES
('Orange')
,('Pink')


Select  *
From    #temp
于 2013-07-13T23:17:10.253 回答