I\xe2\x80\x99m 尝试使用 UDF 作为在检查约束内使用 SELECT 命令的替代方法。我需要对报告表施加约束,以确保signedBy字段是人员记录的PK,该人员记录在auth表中存在一条记录,其人员编号和authType为8(这表明他们有权签署报告)。我的 UDF 应该检查这样的身份验证记录是否存在并返回一个位(如果不存在则返回 0,如果存在则返回 1)。我正在开发 SQL Server Express Edition。
\n我几乎在SQLFiddle重新创建了我的情况:
\nCREATE TABLE personnel(\n personnel INT IDENTITY(1, 1) NOT NULL,\n firstName VARCHAR(20), \n lastName VARCHAR(20),\n login VARCHAR(20) DEFAULT NULL,\n title varchar(20) DEFAULT NULL,\n initials varchar(4) NOT NULL,\n startDate DATE DEFAULT GETDATE(),\n CONSTRAINT PkPersonnel PRIMARY KEY(personnel),\n CONSTRAINT UqPersonnelFirstNameLastName UNIQUE(firstName, lastName),\n CONSTRAINT UqPersonnelInitials UNIQUE(initials)\n);\nCREATE TABLE authType(\nauthType INT NOT NULL IDENTITY(1, 1),\nauthName varchar(50)\nCONSTRAINT PkAuthTypeAuthType PRIMARY KEY(authType)\n);\nCREATE TABLE auth(\nauth INT NOT NULL IDENTITY(1, 1),\npersonnel INT NOT …
Run Code Online (Sandbox Code Playgroud) 我在用着
Microsoft SQL Server 2019 (RTM-CU22) (KB5027702) - 15.0.4322.2 (X64)
2023 年 7 月 27 日 18:11:00 版权所有 (C) 2019 Microsoft Corporation Express Edition(64 位),适用于 Windows 10 Pro 10.0(内部版本 19045: )
我有一张用它创建的表
CREATE TABLE yokogawaReading(
yokogawaReading INTEGER NOT NULL IDENTITY (1, 1),
readingDate SMALLDATETIME not null,
celsiusTemperature1 DECIMAL (4,2),
relativeHumidity1 DECIMAL (5,3),
celsiusTemperature2 DECIMAL (4,2),
relativeHumidity2 DECIMAL (5,3)
);
Run Code Online (Sandbox Code Playgroud)
每当我尝试插入字段值包含readingDate
非零秒值的记录时,例如,
EXEC sp_set_session_context @key = N'readingDateTime', @value = '2023/11/14 11:09:30';
EXEC sp_set_session_context @key = N't1', @value =20.027777777777777777777777778;
EXEC sp_set_session_context …
Run Code Online (Sandbox Code Playgroud)