2

行内の列のサブセットの値をデフォルト値 (定義されている場合) または null にリセットする SQL ステートメントまたはストアド プロシージャを探しています。行にはリセットしたくない他の列があります。それ以外の場合は、行を削除して、さまざまなデフォルト値で初期化される新しい行を作成することができます...それは私が望む効果ですが、列の特定のサブセット。

概念的に、私は探しています

UPDATE eirProj 
SET <all columns named like 'paf%'> TO THEIR DEFAULT OR NULL
WHERE prjId=@prjId

または少なくとも

UPDATE eirProj 
SET pafAuth=<pafAuth default or NULL>, pafComp=<pafComp default or NULL>, paf...
WHERE prjId=@prjId

デフォルト値を 2 つの場所 (テーブル定義とこのリセット コード) で重複してハードコーディングしないようにしています。理想的には、それほど重要ではありませんが、列の追加、削除、または名前の変更によってサブセットが変更された場合でも機能するように、列名をハードコーディングすることは避けたいと思います。

私は SQL Server で作業していますが、これが唯一の方法であれば、T-SQL 固有のソリューションで問題ありません。

4

1 に答える 1

9

defaultキーワードを使用できます

CREATE TABLE dbo.eirProj
  (
     paf1 INT DEFAULT(100),
     paf2 INT NULL
  )

INSERT INTO dbo.eirProj
VALUES      (1,
             1)

UPDATE dbo.eirProj
SET    paf1 = DEFAULT,
       paf2 = DEFAULT

SELECT *
FROM   dbo.eirProj  

戻り値

paf1        paf2
----------- -----------
100         NULL

paf%動的 SQL を使用して上記を生成しない限り、呼び出されるすべての列に対してこれを行う方法はありません。

DECLARE @Script NVARCHAR(MAX)

SELECT @Script = ISNULL(@Script + ',', '') + QUOTENAME(name) + ' =default'
FROM   sys.columns
WHERE  object_id = object_id('dbo.eirProj')
       AND name LIKE '%paf%'

IF ( @@ROWCOUNT = 0 )
  RETURN

SET @Script = 'UPDATE dbo.eirProj SET ' + @Script

EXEC(@Script)  
于 2011-04-01T16:08:34.887 に答える