【问题标题】:I cannot solve theT T-SQL error. T-SQL says I have to convert VARCHAR value GG?我无法解决 T T-SQL 错误。 T-SQL 说我必须转换 VARCHAR 值 GG?
【发布时间】:2017-06-23 03:35:05
【问题描述】:

我使用的是 SQL Server Express 2014。 我写了下面的查询。 SQL 在下面的错误消息中说明了这一点,但不知道该怎么做。 “将 varchar 值 'GG' 转换为数据类型 int 时转换失败” 不确定如何使用 CAST 或 CONVERT 解决此问题。

----------------------------------------------- ----------------------------------

USE AdventureWorks2012  
GO

DECLARE @Number01 AS INT
DECLARE @Number02 AS INT
DECLARE @Number03 AS INT
DECLARE @Number04 AS INT
DECLARE @Number05 AS INT
DECLARE @Number06 AS INT
DECLARE @Number07 AS INT

SET @Number01 = 150
SET @Number02 = 200
SET @Number03 = 350
SET @Number04 = 450
SET @Number05 = 550
SET @Number06 = 650
SET @Number07 = 800


SELECT  A.ProductID  ,A.Name  ,A.ProductModelID  ,A.ProductNumber ,A.MakeFlag  ,A.Color  ,A.SafetyStockLevel ,A.StandardCost ,A.ListPrice,A.DaysToManufacture ,A.SellEndDate ,A.ModifiedDate ,A.ListPrice
,B.Name ,B.ListPrice ,B.Adjusted_List_Price ,C.ProductDescriptionID ,C.Description ,C.ModifiedDate ,D.ProductID ,D.StartDate ,D.EndDate ,D.ListPrice ,D.ModifiedDate, E.Name,E.CatalogDescription,E.ModifiedDate ,F.ReferenceOrderID ,F.TransactionDate ,F.TransactionID ,F.Quantity
,IIF(A.ListPrice >=@Number01,@Number01 *@Number02 + @Number03, 'GG')

FROM  [Production].[Product] AS A 
INNER JOIN [Production].[Product_2] AS B
ON A.Name = B.Name

INNER JOIN  [Production].[ProductDescription] AS C
ON A.ProductID = C.ProductDescriptionID

INNER JOIN  [Production].[ProductListPriceHistory] AS D
ON A.ProductID = D.ProductID

INNER JOIN   [Production].[ProductModel] AS E
ON A.ProductModelID = E.ProductModelID

FULL JOIN [Production].[TransactionHistory] AS F
ON A.ProductID = F.ProductID

WHERE A.ProductModelID IS NOT NULL
AND A.Color IS NOT NULL AND F.Quantity IS NOT NULL

----------------------------------------------- ----------------------------------

有人可以请教,因为我真的很困惑。?? 谢谢

史莱克

【问题讨论】:

  • AdventureWorks DB 中的 Production.Product.ListPrice 是一种货币类型。

标签: sql sql-server tsql


【解决方案1】:

您的问题是您使用两种不同的数据类型对 IIF 进行 TRUE 和 FALSE 评估。你可以使用这样的东西:

IIF(A.ListPrice >=@Number01,CAST((@Number01 *@Number02 + @Number03) AS nvarchar(50)), 'GG')

通过将整数转换为 varchar,您可以在同一列中使用字符串 'GG'。

【讨论】:

  • 太棒了!很好的帮助!
  • 出于兴趣 - 你觉得我的 SQL 技能怎么样??
  • 您应该查找为什么 EXISTS 优于查找非 null 的连接并使用 CASE 语句而不是 SQL 中包含的 IIF 函数来帮助从 Access 转换。
  • 嗨,安东尼,感谢您的反馈。你能给我一个这样的例子吗?可以在我所做的事情中使用,以便更好地澄清。谢谢。史瑞克
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
相关资源
最近更新 更多