更新未创建该表的过程中的表

时间:2013-01-09 20:41:23

标签: sql procedure

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

2 个答案:

答案 0 :(得分:1)

在临时表中创建存储过程中的表并不是一个好习惯。

如果其他进程无法识别,我可以看到两种可能性。首先,您创建了一个临时表,它不在新proc的范围内。

其次,您没有给正在执行第二个proc的用户授予该表的权限。

答案 1 :(得分:0)

如果它是临时表或表变量,一旦原始sproc完成执行,它将被处理掉。

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

如果希望每次运行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