14

ユーザーが並べ替えることができるアイテムを含む列があります。

DOC_ID  DOC_Order DOC_Name
   1       1        aaa
   2       3        bbb
   3       2        ccc

エントリの作成時に DOC_Order を適切に初期化する方法を見つけようとしています。適切な値は、対応する DO-CID (自動割り当てされるため)、または MAX(DOC-ORDER) + 1 です。

少しグーグルで調べた後、スカラー関数の戻り値をデフォルトの列に割り当てることができることがわかりました。

CREATE FUNCTION [dbo].[NEWDOC_Order] 
(
)
RETURNS int
AS
BEGIN

RETURN (SELECT MAX(DOC_ORDER) + 1 FROM DOC_Documents)

END

しかし、MS SQL Management Studio を使用して試行するたびに、「列 'DOC_Order' のデフォルトの検証中にエラーが発生しました」というメッセージが表示されました。

関数を DEFAULT に割り当てるための正確な SQL 構文は何ですか?

4

3 に答える 3

24

そのようなデフォルトを追加する構文は次のようになります

alter table DOC_Order 
add constraint 
df_DOC_Order 
default([dbo].[NEWDOC_Order]())
for DOC_Order

また、DOC_Orderがnullの場合に処理するように関数を変更することもできます

Create FUNCTION [dbo].[NEWDOC_Order] 
(
)
RETURNS int
AS
BEGIN

RETURN (SELECT ISNULL(MAX(DOC_ORDER),0) + 1 FROM DOC_Documents)

END
于 2009-01-14T10:38:45.693 に答える
7

誰かがインターフェースを使用してそれを行いたい場合は、次のように入力します

[dbo].[NEWDOC_Order]()

トリックを行います。どうやらすべての角かっこが必要です。そうしないと、入力が拒否されます。

于 2009-01-14T10:58:28.510 に答える
4

これは、SQL Server Management Studio GUI を使用して実行するためのスクリーン ショットです。

  1. テーブルを右クリックして選択Design

ここに画像の説明を入力

  1. プロパティを表示するには、テーブルのデザイン ビューでDOC_Order列 (または既定値が必要な他の列) を選択します。

ここに画像の説明を入力

  1. Default Value or Binding次のように括弧付きの関数名で更新します。

ここに画像の説明を入力

注:Lukが述べたように、スキーマ(この場合はdbo )を含むすべての括弧が必要です。

于 2016-01-28T22:00:37.547 に答える