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