2013-01-05 33 views
0

转换功能,我写了下面的SQL上MSACCESS错误在SQL

SELECT 
    Followup.MRN, Followup.dateentered, Followup.formname, 
    (Followup.MRN & Format([Followup.dateentered], "yyyymmdd") 
    & Followup.formname) 
    AS UniqueMilestoneID 
FROM Followup; 

它工作得很好

现在,当我写这篇文章在SQL Server:

SELECT 
    Followup.MRN, Followup.dateentered, Followup.formname, 
    (Followup.MRN & Convert([Followup.dateentered], "yyyymmdd") 
    & Followup.formname) AS UniqueMilestoneID 
FROM Followup 

我得到以下错误

Msg 207,Level 1 6,状态1,行1
无效的列名称'yyyymmdd'。
消息243,级别16,状态1,行1
类型Followup.dateentered不是定义的系统类型。

任何想法如何克服“转换”功能

+0

你把现场/对象名称在双引号,字符串在单引号中SQLServer的。 “val”解释为列名称,'val'作为字符串值。 – a1ex07

+0

您需要使用SQL Server ** 2012 **,它具有[新的'FORMAT'函数](http://msdn.microsoft.com/zh-cn/library/hh213505.aspx)来执行此类日期格式设置。对于其他版本的SQL Server,请查看适当的[CONVERT'语法](http://msdn.microsoft.com/zh-cn/library/ms187928.aspx)以及如何获取所需的格式 –

+1

当您正在做这样的事情,记住msaccess在SQL方面是非常不规范的。 –

回答

3

我认为的错误,你想这样的:

SELECT 
    Followup.MRN, Followup.dateentered, Followup.formname, 
    Followup.MRN + 
     Convert(char(8), Followup.dateentered, 112) + 
     Followup.formname AS UniqueMilestoneID 
FROM Followup 

这里是date formats in SQL Server参考。还来连接在SQL服务器字符串要使用+标志,而不是在SQL Server中&

2

首先,字符串常量用单引号,不是双引号分隔。

其次,convert不会以这种形式引用参数。见this

我想你想的是:

convert(varchar(8), Followup.DateEntered, 112)