Sql server 2008 从字符串错误转换日期

Sql server 2008 从字符串错误转换日期,sql-server-2008,stored-procedures,Sql Server 2008,Stored Procedures,我有一个select语句,其中包含数字、说明、日期。当我尝试将我的日期添加到语句并运行它时,我从字符串错误中得到了一个日期转换,我真的不知道如何进行转换 DECLARE @parties AS TABLE ( PartyId UNIQUEIDENTIFIER , Cases NVARCHAR(MAX) , CaseTypes VARCHAR(MAX) , Assignment DateTime) DECLARE @cases NVARCHAR(MAX) DECLAR

我有一个select语句,其中包含数字、说明、日期。当我尝试将我的日期添加到语句并运行它时,我从字符串错误中得到了一个日期转换,我真的不知道如何进行转换

DECLARE @parties AS TABLE (
    PartyId UNIQUEIDENTIFIER
,   Cases    NVARCHAR(MAX)
,   CaseTypes VARCHAR(MAX)
,   Assignment DateTime)

DECLARE @cases NVARCHAR(MAX) 
DECLARE @casetypes VARCHAR(MAX)
DECLARE @assignment DateTime
DECLARE @linebreak AS VARCHAR(2)

SET @cases = NULL
SET @casetypes = NULL
SET @assignment = NULL
SET @linebreak = CHAR(13) + CHAR(10)
SELECT @cases = COALESCE(@cases+ @linebreak + C.CaseNumber, C.CaseNumber)+"-"+CT.[Description]+"-"+A.DateOn
FROM [Case] C
INNER JOIN CaseType CT ON C.CaseTypeId = CT.CaseTypeId
INNER JOIN @partyCases PC ON C.CaseId = PC.CaseId 
INNER JOIN Appointment A ON C.CaseId = A.CaseId
WHERE PC.PartyId = @partyId

将.DateOn添加到我的select语句并运行该语句后会发生错误-任何建议都会很好。谢谢

SQL将日期值作为datetime返回,这些值不能隐式用作字符串(varchar)。您必须显式转换或强制转换它们。因此,请通过以下两种方式之一更改select语句:

SELECT @cases = COALESCE(@cases+ @linebreak + C.CaseNumber, C.CaseNumber)+"-"+CT.[Description]+"-"+CONVERT(varchar, A.DateOn)


CONVERT有一点优势——如果您愿意,可以在日期上应用格式设置。

谢谢!我使用了转换,以便应用格式设置。谢谢你的大力帮助。还有一个问题。。。我正在尝试转换,但select语句不接受它:select@cases=COALESCE(@cases++@linebreak+C.CaseNumber,C.CaseNumber)+“-”+CT.[Description]+“-”+convert(VARCHAR,@assignment,100)作为.DateOnHmm…仔细查看原始查询,我认为您做得不对。所有变量都设置为NULL,但在select中,您试图将它们连接到一个字符串,并执行@cases=COALESCE(@cases…),我认为这是行不通的。如果您能告诉我您的查询输出应该是什么,我可能会帮助您。您的想法可能是正确的,但也不确定-到目前为止,它能够正确地显示所需的数据-如果我发现任何可疑之处,我会让您知道-但感谢您的帮助。对于convert,我使用了:convert(VARCHAR,A.DateOn,101),它工作了
SELECT @cases = COALESCE(@cases+ @linebreak + C.CaseNumber, C.CaseNumber)+"-"+CT.[Description]+"-"+CAST(A.DateOn as varchar)