/ / sqlstate 5001エラー「データベースにはすでにPKCURSORという名前のオブジェクトがあります」-sql-server、tsql

sqlstate 5001エラー「データベースにすでにPKCURSORという名前のオブジェクトがあります」-sql-server、tsql

2005に移行する前に2000dbで正常に動作していたPowerbuilderアプリがあります。次のエラーが発生します。

sqlstate5001エラー「PKCURSORという名前のオブジェクトがすでに存在します データベース」

以下の部分的なコードはによって変更されていますドロップコントラクトPKCURSORを追加します。そのため、powerbuilderがインストールされている2つのdbaでエラーが表示されず、ネットワークドライブからアプリを実行します。他のユーザーがネットワークドライブからアプリを実行すると、エラーが発生します。私もそのユーザーを作成しました。 dboを実行しても、エラーが発生します。 何か案は?

ALTER PROCEDURE [dbo].[GUMBO_SP_PROP_ACTUAL_ACCOMPLISHMENTS_PF]
@PROG_YEAR CHAR(4)
AS

DECLARE @PROGRAM_YEAR                   CHAR(4),
@SUM_LOW_MOD_PERSONS_PROPOSED   INTEGER,
@SUM_LOW_MOD_PERSONS_ACTUAL     INTEGER,
@SUM_TOTAL_PERSONS_PROPOSED     INTEGER,
@SUM_TOTAL_PERSONS_ACTUAL       INTEGER,
@ERROR_STRING                   CHAR(132),
@ACTIVITY_CODE                  CHAR(3)

CREATE TABLE #ACCOMPLISHMENTS(
PROGRAM_YEAR                CHAR(4) NOT NULL,
ACTIVITY_CODE               CHAR(3) NOT NULL,
TOTAL_PERSONS_PROPOSED      DECIMAL(18,2) DEFAULT 0,
TOTAL_PERSONS_ACTUAL        DECIMAL(18,2) DEFAULT 0,
LOW_MOD_PERSONS_PROPOSED    DECIMAL(18,2) DEFAULT 0,
LOW_MOD_PERSONS_ACTUAL      DECIMAL(18,2) DEFAULT 0
)
-- Alter the temporary table to have a primary key of application number and program year.
ALTER TABLE #ACCOMPLISHMENTS
ADD CONSTRAINT PKCURSOR PRIMARY KEY (PROGRAM_YEAR, ACTIVITY_CODE)

DECLARE ACTIVITY_CURSOR CURSOR FOR
SELECT dbo.ACTIVITY_CODE.activity_code
FROM dbo.ACTIVITY_CODE
WHERE
(dbo.ACTIVITY_CODE.activity_code LIKE "P%%")
and (dbo.ACTIVITY_CODE.activity_code <> "P01")
ORDER BY dbo.ACTIVITY_CODE.activity_code

ALTER TABLE #ACCOMPLISHMENTS
DROP CONSTRAINT PKCURSOR

回答:

回答№1は2

これはあなたが持っているために起こったかもしれません primary key 同じ名前ですでに同じに schema。それがどのテーブルにあるかを見つけるには、次のクエリを実行します。

SELECT
DISTINCT
Constraint_Name AS [Constraint],
Table_Schema AS [Schema],
Table_Name AS [TableName]
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE CONSTRAINT_NAME = "PKCURSOR"

溶液:

以下のコードを追加して、キーが存在する場合はドロップし、このスニペットを後に配置します CREATE TABLE #ACCOMPLISHMENTS ストアドプロシージャの一部。

IF EXISTS(select * from sys.key_constraints
WHERE name ="PKCURSOR")
ALTER TABLE #ACCOMPLISHMENTS
DROP CONSTRAINT PKCURSOR