3
私は、次のSQLコードを持っている:Strange "既にデータベースにオブジェクトがあります。"エラー
IF OBJECT_ID('tempdb..#PropList') IS NOT NULL
DROP TABLE #PropList
DECLARE @Split CHAR(1), @propList NVARCHAR(MAX), @PropListXml XML
SET @Split = ','
SET @propList = 'NAME,DESCRIPTION'
-- SET @propList = ''
IF (@propList IS NOT NULL AND @propList != '')
BEGIN
SET @PropListXml = CONVERT(XML,'<root><s>' + REPLACE(@propList, @Split, '</s><s>') + '</s></root>')
SELECT SystemName = T.c.VALUE('.','nvarchar(36)')
INTO #PropList
FROM @PropListXml.nodes('/root/s') T(c)
END
ELSE
BEGIN
SELECT SystemName
INTO #PropList -- Stops here
FROM tblProperty
END
SELECT * FROM #PropList
かかわらず@propList
の値を、このコードは、常にこのエラーで示された行で停止:
There is already an object named '#PropList' in the database.
私の期待はのことだけでした2つのIFブロックが実行されるため、SELECT... INTO
ステートメントでテーブルを作成しようとする試みは1つだけにしてください。なぜこれは失敗するのですか?
が明示的に' IF'前に '#のPropList'を作成してみてください...':このについての詳細はSO、次の質問を参照してください。 –
@ChrisPickford:それは私のために働いた。私はちょうどこのように動作していない理由が困惑しています –
このエラーは、コード解析中(および実行前)に生成され、コード解析は(期待通りに)制御フロー文を実行しません。この問題を回避するには、@Chris Pickfordの答えを使用してください。 – Alex