1

テーブルを作成しようとしているときに 2 つの問題があります。

**システム日付***の場合無効な列名と表示されます*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

2 つの問題があります。

  • 現在のシステムの日付と時刻を取得する関数は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の言語/日付形式の設定に大きく依存します)。特定の形式を指定する必要がある場合CONVERTは、多くの定義済み形式のいずれかを使用できる を使用できます (関連する詳細については、MSDN のドキュメントを参照してください)。

それでも不十分な場合 - SQL Server 2012PARSEには、文字列をフォーマットする任意の日付形式を指定できるという新しい関数が用意されています。詳細については、関連する MSDN ドキュメントを参照してください

最善の方法は、可能な限り日付を文字列との間で変換しないことです。あなたの場合、これは簡単に実行できるはずです! 使用するだけです:

INV_DATE DATE DEFAULT SYSDATETIME() NOT NULL,

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