我有這個疑問:當沒有INSERT語句時,爲什麼會出現「字符串或二進制數據會被截斷錯誤」?
USE [SomeDatabase];
GO
DECLARE @percentageValue decimal(15,4) = 1.50;
SELECT a.ID, a.Amount, a.Status
FROM [dbo].ATable as a
INNER JOIN [dbo].BTable as b
ON a.LinkToB = b.ID
INNER JOIN [OtherDatabase].[dbo].CTable as value
ON value.[Key] = CONCAT(N'APrefixAboutThisLongThatsNecessaryBecauseDontAsk',b.AltID)
WHERE a.Status = N'SomeStatus'
AND a.Amount > (COALESCE(TRY_CONVERT(DECIMAL(15,2), value.Value), 0)*@percentageValue);
GO
(節錄保密的實際列名)
而且我得到了傳統: 「消息8152,級別16,狀態10,第3行 字符串或二進制數據將被截斷。「 錯誤。 Google告訴我,我正在嘗試將某些東西插入太小的列中,這很有道理。
然而,這不是一個INSERT操作(這實際上是我的查詢的所有SQL),所以我不能爲我的生活檢測截斷髮生在哪裏或爲什麼。我認爲這是Transact-SQL的問題,但最奇怪的問題是,儘管出現錯誤,我仍然從查詢中獲得結果。
根據要求,這裏是表格模式的相關部分。
USE [SomeDatabase]
CREATE TABLE [dbo].[ATable](
[ID] [uniqueidentifier] NOT NULL,
[Amount] [decimal](15, 2) NOT NULL,
[Status] [nvarchar](32) NOT NULL,
[LinkToB] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_TableA] PRIMARY KEY CLUSTERED
(
[ID] ASC
))
GO
CREATE TABLE [dbo].[BTable](
[ID] [uniqueidentifier] NOT NULL,
[AltID] [uniqueidentifier] NOT NULL
CONSTRAINT [PK_TableA] PRIMARY KEY CLUSTERED
(
[ID] ASC
))
GO
USE [OtherDatabase]
GO
CREATE TABLE [dbo].[CTable](
[ID] [uniqueidentifier] NOT NULL,
[Key] [nvarchar](100) NOT NULL,
[Value] [nvarchar](max) NOT NULL)
CONSTRAINT [PK_TableC] PRIMARY KEY CLUSTERED
(
[ID] ASC
)
'Key'列的大小是多少? – Deepshikha 2014-09-12 17:16:19
你可以試着發佈** BTable **和** CTable **的模式嗎? – 2014-09-12 17:21:32
也deworde你有一個表的別名「t」,t.Status和t.Amount的引用,但沒有定義t別名。不是問題的一部分,而是令人困惑。 – Dbloch 2014-09-12 17:57:30