2013-01-09 82 views
1

這是可能的一個過程?我在一個程序中創建了一個表格,我知道它存在。現在我想從另一個程序對此表進行更新。當我嘗試這樣做時,我得到一個「無效的對象名稱」錯誤。如果我將相同的更新代碼放入創建表的過程中,則工作得很好。我如何從不同的程序更新這張表?更新表在該表中未創建

+4

它是臨時表嗎?桌子的名字是什麼? – mellamokb

+2

*** *** SQL只是*結構化查詢語言* - 許多數據庫系統中使用的語言,但沒有AA數據庫產品......很多事情都是特定於供應商 - 所以我們真的需要知道什麼**數據庫系統**(以及您正在使用的版本).... –

+1

那些表位於不同數據庫?,服務器? – Lamak

回答

1

這不是一個很好的做法,創建一個存儲過程表,除了臨時表。

如果其他PROC不承認它,我可以看到兩種可能性。首先你創建了一個臨時表,並且它超出了新進程的範圍。

第二你沒有給誰正在執行第二PROC權限表用戶。

0

如果它是一個臨時表或表變量,它會被設置一旦始發SPROC完成執行的。

根據RDBMS平臺(假設MS在這裏),您可以創建一個全局臨時表(例如##MyTable),然後將其名稱作爲輸入傳遞給第二個存儲過程以進行進一步處理。

,如果你想在存儲過程的每次運行到創建自己的表你可能會考慮生成一個唯一的特定日期時間,表名:如果你要堅持同一個表,並重新使用它

DECLARE @Now datetime, @TableName varchar(50) 

SET @TableName = 'TheTable_' + CAST(YEAR(@Now) AS varchar(4)) + CAST(MONTH(@Now) AS varchar(2)) + CAST(DAY(@Now) AS varchar(2)) + CAST(DATEPART(HOUR, @Now) AS varchar(2)) + CAST(DATEPART(MINUTE, @Now) AS varchar(2)) + CAST(DATEPART(SECOND, @Now) AS varchar(2)) 

相反,可以檢查它是否存在並採取相應措施:

IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TheTable_xxxx') 
BEGIN 

    ... do stuff to the existing table here, like truncate it or mark any 
    ... existing records as processed somehow or whatever. 

END