1

这可能吗?我在一个过程中创建了一个表,我知道它存在。现在我想从另一个程序更新这个表。当我尝试这样做时,我收到“无效的对象名称”错误。如果我将相同的更新代码放入创建表的过程中,它就可以正常工作。如何从不同的过程更新此表?

4

2 回答 2

1

除了临时表之外,在存储过程中创建表不是一个好习惯。

如果另一个 proc 无法识别它,我可以看到两种可能性。首先,您创建了一个临时表,它超出了新 proc 的范围。

其次,您没有授予执行第二个过程的用户对该表的权限。

于 2013-01-09T20:45:52.060 回答
0

如果它是一个临时表或表变量,它将在原始存储过程完成执行后被处理掉。

根据 RDBMS 平台(假设这里是 MS),您可以创建一个全局临时表(例如##MyTable),然后将其名称作为输入传递给第二个存储过程以进行进一步处理。

如果您希望 sproc 的每次运行都创建自己的表,则可以考虑生成一个唯一的特定于日期时间的表名:

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
于 2013-01-09T20:56:21.613 回答