1

尝试创建表时有两个问题。

对于**系统日期***它说无效的列名*TO_DATE('01-JAN-2008','DD-MON-YYYY'))); * 它说 TO_DATE 不是重新识别的内置函数名称。

^ 两者都在表格发票中。

这是使用 SQL SERVER 2012

CREATE TABLE VENDOR(
V_CODE          INTEGER     NOT NULL    UNIQUE,
V_NAME          VARCHAR(35) NOT NULL,
V_CONTACT       VARCHAR(15) NOT NULL,
V_AREACODE      CHAR(3)     NOT NULL,
V_PHONE         CHAR(8)     NOT NULL,
V_STATE         CHAR(2)     NOT NULL,
v_ORDER         CHAR(1)     NOT NULL,
PRIMARY KEY (V_CODE));

CREATE TABLE PRODUCT(
P_CODE          VARCHAR(10)     NOT NULL,
P_DESCRIPT      VARCHAR(35)     NOT NULL,
P_INDATE        DATE            NOT NULL,
P_QOH           SMALLINT        NOT NULL,
P_MIN           SMALLINT        NOT NULL,
P_PRICE         DECIMAL(8,2)    NOT NULL,
P_DISCOUNT      DECIMAL(5,2)    NOT NULL,
V_CODE          INTEGER,
PRIMARY KEY (P_CODE),
FOREIGN KEY(V_CODE) REFERENCES VENDOR ON UPDATE CASCADE);


CREATE TABLE CUSTOMER(
CUS_CODE            DECIMAL         PRIMARY KEY,
CUS_LNAME           VARCHAR(15)     NOT NULL,
CUS_FNAME           VARCHAR(15)     NOT NULL,
CUS_INITIAL         CHAR(1),            
CUS_AREACODE        CHAR(3)         DEFAULT '615'       NOT NULL,
                                                        CHECK(CUS_AREACODE IN ('615','713','931')),
CUS_PHONE           CHAR(8)         NOT NULL,
CUS_BALANCE         DECIMAL(9,2)        DEFAULT 0.00,
CONSTRAINT CUS_UI1 UNIQUE (CUS_LNAME, CUS_FNAME));


CREATE TABLE INVOICE (
INV_NUMBER      DECIMAL     PRIMARY KEY,
CUS_CODE        DECIMAL     NOT NULL REFERENCES CUSTOMER(CUS_CODE),
INV_DATE        DATE        DEFAULT SYSDATE NOT NULL,
CONSTRAINT INV_CK1 CHECK (INV_DATE > TO_DATE('01-JAN-2008','DD-MON-YYYY')));
4

1 回答 1

1

你有两个问题:

  • SYSDATETIME()在 T-SQL/SQL Server中调用获取当前系统日期和时间的函数(不是sysdate

  • 在 T-SQL/SQL Server 中将字符串转换为dateor的方法是使用or (不是- T-SQL 中没有这样的函数)datetimeCASTCONVERTTO_DATE

使用类似的东西

SELECT CAST('01-JAN-2008' AS DATE) 

或类似的东西(它在很大程度上取决于您在 SQL Server 中的语言/日期格式设置是否有效)。如果您需要指定特定格式,可以使用CONVERTwhich 允许您使用许多预定义格式中的一种(请参阅MSDN 文档中的相关详细信息)。

如果这还不够 - SQL Server 2012有一个名为的新函数PARSE,它允许您指定字符串格式化的任意日期格式。同样,请参阅相关的 MSDN 文档了解详细信息

最好的办法是尽可能避免在字符串之间来回转换日期,在您的情况下,这应该很容易做到!只需使用:

INV_DATE DATE DEFAULT SYSDATETIME() NOT NULL,

CONSTRAINT INV_CK1 CHECK (INV_DATE > '20080101');
于 2013-06-16T08:06:44.897 回答