在SQL Server视图创建上转换数据类型

时间:2014-08-19 14:07:42

标签: sql sql-server sql-server-2008

我对SQL很新,而且在创建View时我在将Guid的数据类型转换为String时遇到了一些问题。在查看了这个问题之后,我不确定为什么以下语句会引发错误:

Create View or Function failed because no column name was specified for column 2.

说明:

CREATE VIEW CustomerContactView
AS
SELECT [Id]
  ,CAST([Guid] AS NVARCHAR(100)) 
  ,[ContactGuid]
  ,[MethodId]
  ,[Details]
  ,[OutcomeId]
  ,[ActionRequired]
  ,[IsValid]
FROM [Main].[dbo].[Customer_ContactLog]

非常感谢任何帮助,谢谢

3 个答案:

答案 0 :(得分:2)

您只需要为从视图中选择时使用的该列提供新名称:

CREATE VIEW CustomerContactView
AS
SELECT [Id]
  ,CAST([Guid] AS NVARCHAR(100)) AS Guid
  ,[ContactGuid]
  ,[MethodId]
  ,[Details]
  ,[OutcomeId]
  ,[ActionRequired]
  ,[IsValid]
FROM [Main].[dbo].[Customer_ContactLog]

这是因为该列中的值是动态计算的,与表中的值无关。计算列是未物理存储在表中的虚拟列,因此DBMS无法使用表中的原始列名。

答案 1 :(得分:1)

在视图中,当您应用函数或以其他方式操作列时,连接多个列,类似于此类,您需要为该列添加别名: CAST([Guid] AS NVARCHAR(100)) AS <some clever alias goes here>

答案 2 :(得分:1)

与错误完全相同:您未在视图中为第二列指定列名。如果按原样运行SELECT,您会看到以下列名称:

ID(无列名)ContactGuid ......等。

将其更改为:

CREATE VIEW CustomerContactView
AS
SELECT [Id]
    ,CAST([Guid] AS NVARCHAR(100)) [Guid]
    ,[ContactGuid]
    ,[MethodId]
    ,[Details]
    ,[OutcomeId]
    ,[ActionRequired]
    ,[IsValid]
FROM [Main].[dbo].[Customer_ContactLog]