![](/img/trans.png)
[英]Stored Procedure: There is already an object named '#columntable' in the database
[英]There is already an object named 'name' in the database - stored procedure error - SQL Server
我的 SQL 服務器數據庫中有兩個名為timeus
和usdpay
的表。 這兩個表每周更新一次。
我做了一些小的改造,將這兩個表組合起來,創建了一個名為fluslabor
的新表。
我使用此處顯示的存儲過程創建了fluslabor
,它正在運行:
CREATE PROCEDURE [dbo].[sp_uslabor]
AS
BEGIN
SET NOCOUNT ON
IF OBJECT_ID(N'dbo.fluslabor', N'U') IS NOT NULL
TRUNCATE TABLE [dbo].[fluslabor];
SELECT ut.employee_code
,ut.employee_name
,ut.department_desc
,ut.location_desc
,ut.hour
,ut.projects_code
,ut.in_effective_time
,ut.out_effective_time
,ut.date
,ut.id
,p.rate
,(p.rate * ut.hour ) as Labour_Cost
INTO fluslabor
FROM timeus ut
LEFT JOIN usdpay p ON (TRIM(ut.id) = TRIM(p.id) AND ut.date = p.date)
WHERE ut.projects_code NOT LIKE '0%'
END
今天我在我的兩個表timeus
和usdpay
中更新了新數據。
當我執行存儲過程時,SQL 服務器拋出此錯誤:
消息 2714,級別 16,State 6,過程 SP_uslabor,第 12 行 [批啟動第 38 行]
數據庫中已經有一個名為“fluslabor”的 object。
我每次都需要截斷表並加載新數據。 我檢查了類似的帖子,他們說要使用 drop table 選項。 我不想刪除表,只想截斷並執行程序
誰能告訴我這里的問題是什么?
這里的問題是fluslabor
表已經存在於數據庫中。 您在插入上方嘗試的是檢查 object 是否存在,然后截斷相同的內容
您可以在此處嘗試兩種可能的方法。
相反,如果TRUNCATE
執行DROP TABLE
。 但是,如果您已向任何用戶提供對表的特定自定義訪問權限,這也將刪除表上的現有用戶權限
IF OBJECT_ID(N'dbo.fluslabor', N'U') IS NOT NULL DROP TABLE [dbo].[fluslabor];
最安全的方法是更改SELECT.. INTO
語句並將其轉換為INSERT INTO
像這樣
INSERT INTO fluslabor ( <List your Destination columns> ) SELECT <List your Source columns> FROM <Source Query>
第二種方法將加載記錄並保留所有現有權限
IF EXISTS (SELECT 1 FROM sys.objects WHERE type = 'P' AND name = 'your SP name')
BEGIN
DROP PROCEDURE "your SP name";
END
GO
CREATE PROCEDURE "your SP name"
AS
BEGIN
.
.
.
.
試試這個我想這會對你有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.