SQL Server:Alter View错误 - 未指定列名

3

我正在尝试修改一个视图 - 我只是想提供一个完全新的 SELECT 语句的定义。

我的 SQL 语句看起来像这样(出于隐私原因,我更改了一些列):

ALTER VIEW dbo.vwViewNameHere
AS
   SELECT 
       h.BATCH, h.batch_name COLLATE Latin1_General_CI_AS,  
       h.serial_from, h.serial_to, h.batch_description
   FROM            
       (SELECT 
            BATCH, LTRIM(RTRIM(NAME)) COLLATE Latin1_General_CI_AS AS batch_name, 
            aa AS serial_from, bb AS serial_to, 
            CONVERT(varchar(99), BATCH) + ' - ' + LTRIM(RTRIM(NAME)) COLLATE Latin1_General_CI_AS AS batch_description
        FROM 
            [IPAddress].database.dbo.tablename) AS h 
    FULL OUTER JOIN 
        dbo.othertablename AS b WITH (nolock) ON LTRIM(RTRIM(b.Batch_Name)) = h.batch_name COLLATE Latin1_General_CI_AS 
                                              AND h.serial_from = b.Start_Serial 
                                              AND h.serial_to = b.End_Serial
    WHERE 
        (b.Batch_ID IS NULL)

我确认所选的语句运行正确,但当我运行修改视图语句时,返回以下信息:

Msg 4511, Level 16, State 1, Procedure vwViewNameHere_NotImportedyet, Line 3
Create View 或 Function 失败,因为未为第二列指定列名称。

之前我曾运行过一个 CREATE VIEW 语句来备份此视图定义,它没有出现任何错误。


h.batch_name COLLATE Latin1_General_CI_AS 作为 batch_name 的别名 - mohan111
感谢你们三个发现了这个问题!我以为查询会忽略COLLATE并保留列名,但显然不是这样——我想这很有道理,因为它确实改变了列内容... - Alex Callard
2个回答

2

正如消息所说,您没有为第二列指定名称。请指定一个名称:

h.batch_name COLLATE Latin1_General_CI_AS as batch_name

1
从错误信息来看:

消息 4511,级别 16,状态 1,过程 vwViewNameHere_NotImportedyet,行 3 创建视图或函数失败,因为未指定第 2 列的列名。

你可以尝试:
ALTER VIEW dbo.vwViewNameHere
AS
   SELECT 
       h.BATCH, h.batch_name COLLATE Latin1_General_CI_AS as batch_name,  
-- etc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接