1

私は SQL Server 2005 を使用しており、次のようなクエリがあります。

INSERT INTO [subject] ([sch_id],
                       [subj_from],
                       [subj_to],
)
SELECT
CASE
WHEN (SELECT @sched = [sch_id]
             FROM [schedule]
             WHERE [sch_name] = 'Searched Schedule Name') IS NULL THEN NULL
ELSE (SELECT @sched = [sch_id]
             FROM [schedule]
             WHERE [sch_name] = 'Searched Schedule Name')
END
AS 'sched_search_result',
   'Sample Value',
   'Sample Value'

これはうまくいきます。[subject] テーブル内に値を挿入します。最初の値 [sch_id] は、検索された CASE ステートメントを通じて [schedule] テーブルから取得されます。

コードの重複を避けたいので、SELECT文の結果をローカル変数に格納し、ISNULL関数で評価してみました。次のようになります。

DECLARE @sched INT
INSERT INTO [subject] ([sch_id],
                       [subj_from],
                       [subj_to],
)
SELECT
CASE ISNULL((SELECT @sched = [sch_id]
             FROM [schedule]
             WHERE [sch_name] = 'Searched Schedule Name'), 0)
WHEN 0 THEN NULL
ELSE @sched
END
AS 'sched_search_result',
   'Sample value',
   'Sample value'

しかし、私のコードは機能しません。SQL Server 2005 では、ローカル変数 (@sched) を使用した行からエラーが発生していると表示されます。クエリのどこが間違っていますか?

4

2 に答える 2

3

これはあなたが望むことをすると思います。

INSERT INTO [subject] ([sch_id], [subj_from], [subj_to])
SELECT (
          SELECT [sch_id]
          FROM [schedule]
          WHERE [sch_name] = 'Search Schedule Name'
       ), 
      'from value',
      'to value'
于 2011-08-10T07:20:12.110 に答える
1

これにより、必要なものが正確にわかります:http: //msdn.microsoft.com/en-us/library/aa259186 (v=sql.80).aspx

于 2011-08-10T07:15:25.150 に答える