1

MS SQL 2008 にストアド プロシージャがあり、エラーなくコンパイルされますが、ストアド プロシージャを実行すると、「文字列またはバイナリ データが切り捨てられます」というエラー メッセージが表示されます。残念ながら、これがどこで起こっているのかを追跡することはできません。

ストアド プロシージャを開発したとき、最初にクエリをテストしたところ、うまくいきました。

だから、誰かが私にこれが起こっている場所と理由、そしてそれを解決する方法を示すことができれば、私は感謝しています:

ALTER PROCEDURE [dbo].[sp_Material_Validation]

@ValidType varchar(MAX),
@MaterialID varchar(MAX)
AS
BEGIN


DECLARE
@MessageReturn varchar(100);
SET @MessageReturn = NULL;

IF @ValidType = 'Primary'

Select TOP 1 Valid.StatusMessage
From
(Select MatID,'Property Not Completed' as StatusMessage
From dbo.Properties
WHERE DATALENGTH(ValueString)=0
UNION
Select PrpCount.MatID,'There not all Properties exist' as StatusMessage
From (Select Count(unkey) as unKeyCt, MatID
From Properties
Group By MatID
Having NOT Count(Cast(UnKey as Int)) = 19)AS PrpCount
UNION
SELECT Header,'Material does not exist' as StatusMessage
FROM Materials Item
Where NOT EXISTS (Select ID
FROM MatMaster Mat
WHERE MAT.ID= Item.HEAD)
UNION
SELECT Header,'Material(s) not Complete' as StatusMessage
FROM Materials
Where MatID IN (Select ID
FROM MatMaster
WHERE INC ='Y')) as Valid
Where Valid.MatID = @MaterialID;

IF @MessageReturn IS NOT NULL

UPDATE dbo.Mat_DEV
SET Inco ='Y',
User_Message = @MessageReturn
WHERE MatID = @MaterialID

ELSE
UPDATE dbo.Mat_DEV
SET User_Message = 'No Validation Errors'
WHERE MatID = @MaterialID
4

3 に答える 3

3

文字列またはバイナリ データは、値を保持するのに十分な大きさのボックスに値を入れようとした場合にのみ表示されます。

さて、実際には2つの場所に値を書いているだけなので、問題の候補は次のとおりです:-

UPDATE dbo.Mat_DEV
SET Inco ='Y',
User_Message = @MessageReturn
WHERE MatID = @MaterialID

..また..

UPDATE dbo.Mat_DEV
SET User_Message = 'No Validation Errors'
WHERE MatID = @MaterialID

これらの両方の列 ( Inco および User_Message ) の列定義を確認してください。私の推測では、設定したい値を保持するには小さすぎると思います。

于 2012-07-17T10:56:24.253 に答える
0

私の推測では、列 User_Message の長さが十分ではありません

于 2012-07-17T10:54:37.663 に答える
0

私も同じ問題を抱えていました。

ストアド プロシージャを直接実行すると、すべて正常に機能しました。ASP.NET から同じプロシージャを呼び出すと、「文字列またはバイナリ データが切り捨てられます」というメッセージが表示されました...

最後に、犯人はデフォルト値が 'suser_sname()' の varchar(20) フィールドであることに気付きました... SQL Management Studio ではユーザー名が短く、ASP.NET からは 20 文字を超えていました... 単純な CAST問題を解決しました。:)

于 2013-08-07T06:53:11.567 に答える