我正在尝试更新表中的特定列,但由于 SQL 编译时列名 IssueTimeUTC 实际上并不存在,因此出现错误。这是我的示例代码:
WHILE @startissuetime<='23:30'
BEGIN
ALTER TABLE Intraday_Forecast_temp
ADD IssueTimeUTC SMALLDATETIME
UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=CAST(@tempdate AS SMALLDATETIME)
WHERE DateTimeUTC>CAST(@tempdate AS SMALLDATETIME)
UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=Dateadd(d,-1,CAST(@tempdate AS SMALLDATETIME))
WHERE
Run Code Online (Sandbox Code Playgroud)
DateTimeUTC<=CAST(@tempdate AS S MALLDATETIME) END
我已经阅读了多个类似的帖子,但我无法做任何事情,因此我恳请您是否可以帮助我。
我得到的错误是这样的:
消息 207,级别 16,状态 1,第 56 行无效的列名称“IssueTimeUTC”。
更新:所以基本上我无法找到这个特定问题的确切解决方案,但我只是找到了一种“绕过”问题的方法。所以这是我使用的更新代码。
WHILE @startissuetime<='23:30'
BEGIN
ALTER TABLE Intraday_Forecast_temp
DROP COLUMN IssueTimeUTC
--------
BULK INSERT.....
--------
ALTER TABLE Intraday_Forecast_temp
ADD IssueTimeUTC SMALLDATETIME
UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=CAST(@tempdate AS SMALLDATETIME)
WHERE DateTimeUTC>CAST(@tempdate AS SMALLDATETIME)
UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=Dateadd(d,-1,CAST(@tempdate AS SMALLDATETIME))
WHERE DateTimeUTC<=CAST(@tempdate AS SMALLDATETIME)
END
Run Code Online (Sandbox Code Playgroud)
我知道这可能不是最优雅的解决方案,但我最初用列 IssueTimeUTC 定义了 Intraday_Forecast_temp 表,然后我删除它并再次添加它。这样,SQL 不再抱怨编译时该列不存在:)
您不能添加该列并在同一批次中使用它。
因此,如果您执行代码,SSMS只需GO在您的命令之间添加,如下所示:
ALTER TABLE Intraday_Forecast_temp
ADD IssueTimeUTC SMALLDATETIME
go ----------------------------<<<<<-----------------------------
UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=CAST(@tempdate AS SMALLDATETIME)
WHERE DateTimeUTC>CAST(@tempdate AS SMALLDATETIME)
UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=Dateadd(d,-1,CAST(@tempdate AS SMALLDATETIME))
WHERE DateTimeUTC<=CAST(@tempdate AS SMALLDATETIME)
Run Code Online (Sandbox Code Playgroud)
如果它是 的一部分stored procedure,请将您的包裹update在EXEC:
exec ('UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=CAST(@tempdate AS SMALLDATETIME)
WHERE DateTimeUTC>CAST(@tempdate AS SMALLDATETIME)')
Run Code Online (Sandbox Code Playgroud)
更新
在您的情况下,您可以以exec这种方式使用包装:
declare @tempdate date = getdate(); -- or whatever it should be
declare @sql nvarchar(4000)= N'UPDATE Intraday_Forecast_temp
SET IssueTimeUTC=CAST(@tempdate AS SMALLDATETIME)
WHERE DateTimeUTC>CAST(@tempdate AS SMALLDATETIME)';
exec sp_executesql @sql, N'@tempdate date', @tempdate = @tempdate;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14899 次 |
| 最近记录: |