4

SQL Server 2000 および 2005 では問題なく動作していたのに、SQL Server 2012 および 2008 R2 でストアド プロシージャを実行すると問題が発生します。

以下のコードを参照してください。

SELECT * INTO #TB_Table_1
FROM (SELECT TOP 1 * FROM TB_Table_2) A

TRUNCATE TABLE #TB_Table_1

私の既存のspにはこのコードがあります。目的は、 の構造をコピーすることだけですTB_Table_2

注: TB_Table_2ID 列がありますMaster_ID

次に、以下のコードでデータを挿入してみます。で、ここが私が困っているところです。

INSERT INTO #TB_Table_1
SELECT * FROM TB_Table_2
WHERE ISNULL(Date,'') = ''
AND ISNULL(ID,'') = ''

これを機能させるために SQL Server で設定する必要があるものはありますか?

編集:

私が得ているエラーは

テーブル '#TB_Table_1' の ID 列の明示的な値は、列リストが使用され、IDENTITY_INSERT が ON の場合にのみ指定できます。

4

4 に答える 4

4

一時テーブルに ID がある場合、この挿入を行うには、最初に次のことを行う必要があります。

SET IDENTITY_INSERT #TB_Master_Organization ON

挿入ステートメントの前。

挿入する列を指定する必要があります。

INSERT INTO #TB_Master_Organization (col1, col2, col3..)
SELECT * FROM TB_Master_Organization
WHERE ISNULL(DeactivatedDate,'') = ''
AND ISNULL(DeactivatedByID,'') = ''

次に、identity_Insert を設定します。

だから、あなたは得た:

SET IDENTITY_INSERT #TB_Master_Organization ON
INSERT INTO #TB_Master_Organization (col1, col2, col3..)
    SELECT * FROM TB_Master_Organization
    WHERE ISNULL(DeactivatedDate,'') = ''
    AND ISNULL(DeactivatedByID,'') = ''
SET IDENTITY_INSERT #TB_Master_Organization OFF

また、これがうまくいかない場合は、これを見てください。

于 2012-07-28T00:58:31.530 に答える
1

ここでは、まず、テーブル構造をコピーするために使用したコードが正しくありません。これは、上位1行も新しい一時テーブルにコピーするためです。

テーブル構造をコピーするには、以下のコードを使用できます。

select * INTO #TB_Master_Organization FROM TB_Master_Organization where 1=2

次に、この一時テーブルでIDENTITY INSERT ONを設定することにより、データを明示的に挿入できます。

しかし、以下のクエリを書くだけで、これを簡単に達成できます。

select * INTO #TB_Master_Organization FROM TB_Master_Organization where WHERE ISNULL(DeactivatedDate,'') = ''
AND ISNULL(DeactivatedByID,'') = ''

ここで1つのクエリで、一時テーブルの最終データを取得します。

于 2012-07-28T05:56:11.487 に答える