SQL Server中的Concat和convert

SQL Server中的Concat和convert,sql,sql-server,Sql,Sql Server,我正在尝试将5列合并为一列,听起来很简单,但是要合并该列的结果表是一个varchar,现在我已经尝试了,但它似乎不起作用 这是我的代码: INSERT INTO [RepositoryCoSD].dbo.AnimalProducts SELECT [DataSeriesID] , concat_ws(CONVERT(INT, CASE WHEN IsNumeric(CONVERT(VARCHAR(12

我正在尝试将5列合并为一列,听起来很简单,但是要合并该列的结果表是一个
varchar
,现在我已经尝试了,但它似乎不起作用

这是我的代码:

INSERT INTO [RepositoryCoSD].dbo.AnimalProducts
    SELECT 
        [DataSeriesID]
        , concat_ws(CONVERT(INT,
            CASE
               WHEN IsNumeric(CONVERT(VARCHAR(12), DataSeriesID)) = 1 
                  THEN CONVERT(VARCHAR(12), DataSeriesID)
                  ELSE 0 
            END) , '-', '-')
        ,[CommodtiySubCommodityID]
        ,[Commodity]
        ,[SubCommodity]
        ,[SectorID]
        ,[Sector]
        ,[GroupID]
        ,[GroupName]
        ,[StatisticTypeID]
        ,[StatisticType]
        ,[SourceID]
        ,[Source]
        ,[SourceDescription]
        ,[PhysicalAttributeTypeID]
        ,[PhysicalAttributeType]
        ,[PhysicalAttributeDesc]
        ,[UtilizationPracticeID]
        ,[UtilizationPractice]
        ,[ProductionPracticeID]
        ,[ProductionPractice]
        ,[SourceSeriesID]
        ,[TimeID]
        ,[TimeFrequency]
        ,[Date]
        ,[GeographyID]
        ,[GeographyType]
        ,[City]
        ,[County]
        ,[State]
        ,[Region]
        ,[Country]
        ,[UnitID]
        ,[Unit]
        ,[LifecyclePhaseID]
        ,[LifecyclePhaseDescription]
        ,[Value] 
    FROM 
        AnimalProductsCoSD.CoSD.Public_Standard_View 
我需要合并5列
UnitID、GeoID、TimeID、LifecyclePhaseID
DataseriesID

我得到了这个错误

将varchar值'-132-'转换为数据类型int时,转换失败

有什么想法吗?

你试过了吗

它将自动将参数转换为字符串。这比使用显式转换要简单一些

您也可以添加其他字符:


CONCAT(UnitID,'-',GeoID,'-',TimeID,'-',LifecyclePhaseID,'-',DataseriesID)

请参见CONCAT的语法

CONCAT_WS(分隔符,argument1,argument2[,argumentN]…)

试着把你的陈述重新写成

CONCAT_WS('-',CONVERT(VARCHAR(10),UnitID), CONVERT(VARCHAR(10),GeoID), CONVERT(VARCHAR(10),TimeID), CONVERT(VARCHAR(10),LifecyclePhaseID), CONVERT(VARCHAR(10),DataseriesID))
其实

     concat_ws(CONVERT(INT,
                CASE
                WHEN IsNumeric(CONVERT(VARCHAR(12), DataSeriesID)) = 1 THEN CONVERT(VARCHAR(12),DataSeriesID)
                ELSE 0 END) ,'-','-') 

行应该是第一行,因为在结果表中,合并列必须是第一行,很抱歉造成混淆

我这样做了,它不起作用,我还想介于两者之间values@BharatRadhakrishnan . . . 然后在需要的地方添加连字符。
     concat_ws(CONVERT(INT,
                CASE
                WHEN IsNumeric(CONVERT(VARCHAR(12), DataSeriesID)) = 1 THEN CONVERT(VARCHAR(12),DataSeriesID)
                ELSE 0 END) ,'-','-')