Sql server SQL Server在

Sql server SQL Server在,sql-server,Sql Server,我正在尝试从tinyint列中获取SELECT语句并对其进行解码 例如: SimpleText 更多文本 其他文本 我在其他帖子中读到过,您使用CAST/CONVERT语句,但我一直得到相同的错误,即它无法将“MoreText”转换为int 我的发言如下 SELECT [ID] ,[OneColumn] ,[UselessColumn] ,CAST (CASE WHEN [ImportantColumn] = 1 THEN 'Si

我正在尝试从tinyint列中获取SELECT语句并对其进行解码

例如:

  • SimpleText
  • 更多文本
  • 其他文本
  • 我在其他帖子中读到过,您使用CAST/CONVERT语句,但我一直得到相同的错误,即它无法将“MoreText”转换为int

    我的发言如下

    SELECT [ID]
          ,[OneColumn]
          ,[UselessColumn]
            ,CAST (CASE 
                WHEN [ImportantColumn] = 1 THEN 'SimpleText'
                WHEN [ImportantColumn] = 2 THEN 'MoreText'
                WHEN [ImportantColumn] = 3 THEN 'AnotherText'
            ELSE 'NoText' END AS nvarchar(20)) AS [ProblemColumn]
          ,[ColumnNotImportant]
    FROM [sof].[ExampleTable]
    
    我也试过了

    SELECT [ID]
          ,[OneColumn]
          ,[UselessColumn]
            ,CASE 
                WHEN [ImportantColumn] = 1 THEN CAST('SimpleText' AS nvarchar(20))
                WHEN [ImportantColumn] = 2 THEN CAST('MoreText' AS nvarchar(20))
                WHEN [ImportantColumn] = 3 THEN CAST('AnotherText' AS nvarchar(20))
            ELSE 'NoText' END  AS [ProblemColumn]
          ,[ColumnNotImportant]
    FROM [sof].[ExampleTable]
    

    让SQL为您完成这项工作。创建一个表,将ImportInstantColumn值作为一列,将要显示的文本作为第二列。然后将查询更改为该表的联接


    查找表的关键是ImportantColumn的值。

    让SQL为您完成这项工作。创建一个表,将ImportInstantColumn值作为一列,将要显示的文本作为第二列。然后将查询更改为该表的联接


    查找表的关键是ImportantColumn的值。

    为什么需要强制转换

    SELECT [ID]
          ,[OneColumn]
          ,[UselessColumn]
            ,CASE WHEN [ImportantColumn] = 1 THEN 'SimpleText'
                  WHEN [ImportantColumn] = 2 THEN 'MoreText'
                  WHEN [ImportantColumn] = 3 THEN 'AnotherText'
                  ELSE 'NoText' 
             END AS [ProblemColumn]
          ,[ColumnNotImportant]
    FROM [sof].[ExampleTable]
    

    你为什么需要演员

    SELECT [ID]
          ,[OneColumn]
          ,[UselessColumn]
            ,CASE WHEN [ImportantColumn] = 1 THEN 'SimpleText'
                  WHEN [ImportantColumn] = 2 THEN 'MoreText'
                  WHEN [ImportantColumn] = 3 THEN 'AnotherText'
                  ELSE 'NoText' 
             END AS [ProblemColumn]
          ,[ColumnNotImportant]
    FROM [sof].[ExampleTable]
    

    你确定上面的查询产生了错误吗?我想无论你对这个查询的结果做什么都是问题所在。错误是来自SQL还是来自代码?很可能是您生成了一个DTO对象,其原始类型为ImportantColumn(int),并且在更改返回的内容时没有对其进行更改。您确定上面的查询生成了错误吗?我认为无论您对该查询的结果做什么,都是问题所在。错误是来自SQL还是来自代码?很可能是您生成了一个DTO对象,该对象的原始类型为ImportantColumn(int),当您更改返回的内容时,该对象没有更改。他说他遇到了错误,无法将“MoreText”转换为int。@Prdp:yes,但是,由于在这个查询中没有对
    int
    进行转换,我怀疑他是否显示了相关部分或简化了它。这就是为什么我的建议是删除多余的
    CAST
    。这要么有效,要么表现出一个更有意义的错误。嗨@Tim,没有演员阵容,我也会犯同样的错误,实际上在乞讨时,我只使用了案例,错误发生后,我开始在这里搜索答案,答案是CAST/CONVERT的解决方案,这两种方法都不起作用。@TimSchmelter错误来自于查询,就像原始列类型一样,但你是对的,我修复了它,去掉了CAST,仍然有效。他说他遇到了错误,无法将“MoreText”转换为int.@Prdp:yesp,但由于此查询中没有转换为
    int
    ,我怀疑他是否显示了相关部分或简化了它。这就是为什么我的建议是删除多余的
    CAST
    。这要么有效,要么表现出一个更有意义的错误。嗨@Tim,没有演员阵容,我也会犯同样的错误,实际上在乞讨时,我只使用了案例,错误发生后,我开始在这里搜索答案,答案是CAST/CONVERT的解决方案,这两种方法都不起作用。@TimSchmelter错误来自于查询,就像原始列类型一样,但你是对的,我修复了它,去掉了CAST,仍然起作用。嘿@n8wrl,这是我的最后一个资源,但这让我想到了更多的问题,其中一个问题是处理查询是否需要更长的时间?@XavierLace:值得怀疑,但最好的办法是测量它。这个解决方案有很多优点-您可以在其他地方使用它,而不需要复制代码,而且您的逻辑现在更为数据驱动,这是一个好东西Hey@n8wrl,这是我的最后一个资源,但这给我带来了更多的问题,其中一个问题是,处理查询会花费更长的时间吗?@XavierLace:我怀疑,但你最好的办法是测量它。这个解决方案有很多优点——您可以在其他地方使用它,而不需要复制代码,而且您的逻辑现在更为数据驱动,这是一件好事