【发布时间】:2014-04-23 07:56:54
【问题描述】:
以下 3 个语句在连续执行时工作正常,但当我将它们包装在一个存储过程中时,我收到此错误消息:
消息 207,第 16 级,状态 1,第 10 行
列名“拆分”无效。
消息 207,第 16 层,状态 1,第 9 行
列名“拆分”无效。
程序定义:
CREATE procedure [dbo].[dsplit_SITEL_update]
as
begin
set nocount on;
IF EXISTS(SELECT * FROM sys.columns
WHERE [name] = N'split_' AND [object_id] = OBJECT_ID(N'dsplit_SITEL$'))
exec sp_rename @objname = N'dsplit_SITEL$.split_',
@newname = 'split',
@objtype = 'COLUMN';
insert into dsplit_SITEL
select
CONVERT(varchar(10), b.row_date, 120) + '_' + CONVERT(nvarchar(10), b.split),
b.*
from dsplit_SITEL a
right join dsplit_SITEL$ b ON a.pk = CONVERT(varchar(10), b.row_date, 120) + '_' + CONVERT(nvarchar(10), b.split)
where a.pk is null and b.row_date is not null;
if OBJECT_ID('dsplit_SITEL$', 'U') is not null
drop table dsplit_SITEL$;
END
这里发生了什么,我怎样才能使程序正常工作?
【问题讨论】:
-
也许不是重点,但如果您打算在程序结束时删除整个表,为什么不直接使用未修改名称的列?
-
问题是我使用 dsplit_SITEL$ 作为临时表只是为了更新主 dsplit_SITEL。问题是,有时他们发送的表格带有不正确的列名并带有尾随下划线:'split_' 而不是 'split'
-
没关系。
INSERT...SELECT的SELECT子句中的列名不用于任何用途,而您使用的是SELECT *,因此任一表都可以工作。 -
Te OP 正在加入
split列。 -
我用 [split] 做一个主键字段:...CONVERT(nvarchar(10), b.split)
标签: sql sql-server tsql stored-procedures