我有一个#temptable,我试图填充它但不起作用。
DECLARE
@nBranchId int
,@tmStartDate datetime
,@tmEndDate datetime
SELECT @nBranchId = 3483
,@tmStartDate = DATEADD(DAY, -10, GETDATE())
,@tmEndDate = GETDATE()
CREATE table #temptable (
nResultsId int
,nInstrId int
,nBranchId int
,nFoldersId int
,strPaperId varchar(50)
,strPosName varchar(50)
,fQuantity float
,fRevaluationPrice float
,fHistRevaluationPrice float
,tmDate datetime
,nPrevResultsId int
)
INSERT INTO #temptable
SELECT
xpr.nResultsId
,xpr.nInstrId
,xpr.nBranchId
,xpr.nFoldersId
,xpr.strPaperId
,xpr.strPosName
,xpr.fQuantity
,xpr.fRevaluationPrice
,xpr.fHistRevaluationPrice
,xpr.tmDate
,nPrevResultsId = dbo.fnGetPrevTradeResultId(xpr.nBranchId, xpr.nInstrId, xpr.strPaperId, xpr.strPosName,xpr.tmDate, xpr.nFoldersId)
FROM dbo.XP_Results AS xpr WITH(READUNCOMMITTED)
WHERE 1 = 1
AND xpr.nBranchId = ISNULL(@nBranchId, xpr.nBranchId)
AND xpr.tmDate BETWEEN @tmStartDate AND @tmEndDate
AND xpr.nInstrId <> 18
DROP table #temptable
出现此错误:
Msg 8152,Level 16,State 14,Line 28 字符串或二进制数据将被截断。 声明已经终止。
我错过了哪里?看了又看了但不能解决它
答案 0 :(得分:2)
您有不同长度的数据类型
要避免此问题,请使用SELECT INTO
声明
#Temptable
将使用正确的数据类型自动创建(您不必使用脚本CREATE
声明的额外好处)
DECLARE
@nBranchId int
,@tmStartDate datetime
,@tmEndDate datetime
SELECT @nBranchId = 3483
,@tmStartDate = DATEADD(DAY, -10, GETDATE())
,@tmEndDate = GETDATE()
SELECT xpr.nResultsId
,xpr.nInstrId
,xpr.nBranchId
,xpr.nFoldersId
,xpr.strPaperId
,xpr.strPosName
,xpr.fQuantity
,xpr.fRevaluationPrice
,xpr.fHistRevaluationPrice
,xpr.tmDate
,nPrevResultsId = dbo.fnGetPrevTradeResultId(xpr.nBranchId, xpr.nInstrId, xpr.strPaperId, xpr.strPosName,xpr.tmDate, xpr.nFoldersId)
INTO #temptable
FROM dbo.XP_Results AS xpr WITH(READUNCOMMITTED)
WHERE 1 = 1
AND xpr.nBranchId = ISNULL(@nBranchId, xpr.nBranchId)
AND xpr.tmDate BETWEEN @tmStartDate AND @tmEndDate
AND xpr.nInstrId <> 18
DROP table #temptable
答案 1 :(得分:1)
应该通过将这两列更改为这样来修复。可能发生的事情是,您正在尝试将大于50个字符的varchars插入varchar(50)列。
strPaperId varchar(max),
strPosName varchar(max)
答案 2 :(得分:1)
这意味着您的一个列的数据大于您为临时表列声明的数据类型大小。
例如,如果您有一个varchar(2)
的临时表列,然后尝试插入值&#39; 123&#39;,您将收到该错误消息,因为我们插入的值比您要插入的列的大小。请注意,此消息可以表示任何类型。
找出带有问题的临时表列,并将大小增加到实际表中的大小。