1

動的 SQL ステートメントを作成しようとしていますが、次のエラーが発生します。

varchar 値 'Dog' をデータ型 int に変換するときに変換に失敗しました エラーは 40 行目にあります

このエラーは実際には何を意味し、このエラーは StoredProcedure のどこにありますか

USE exercise

GO

CREATE PROC REPORT

@customerID VARCHAR
AS

SELECT * INTO #temp FROM customer,animal WHERE customer.customerID = @customerID

ALTER TABLE #temp

ADD

Printed SMALLINT

UPDATE #temp

SET Printed = 0

DECLARE @customerName VARCHAR (30)
DECLARE @customerTelephone VARCHAR(30)
DECLARE @animalID INT
DECLARE @animalName VARCHAR (30)
DECLARE @quantity INT
DECLARE @price INT
DECLARE @speciesName VARCHAR(40)
DECLARE @totalPrice INT

SELECT  
        @customerName = customer.customerName,

        @customerTelephone = customer.customerTelephone

        FROM customer 

        WHERE @customerID = customer.customerID

        PRINT 'CustomerID: ' +@customerID
        PRINT 'Customer Name ' +@customerName
        PRINT 'Customer Telephone: ' +@customerTelephone
        PRINT'animalID  animalName  quantity  price  Species  totalPrice'
        WHILE EXISTS (SELECT * FROM #temp WHERE Printed = 0)
        BEGIN
        SELECT @animalID = MIN(animalID) FROM #temp WHERE Printed = 0

        SELECT @animalName = animalName,
                @quantity = animalCustomer.quantity,
                @speciesName = species.specieName
                FROM animal
                 INNER JOIN animalCustomer ON animal.animalID = animalCustomer.animalIdentificater 
                INNER JOIN species ON species.specieName = animal.speciesIdentificater
                WHERE animal.animalID = @animalID
                SET @totalPrice = @price * @quantity            
                PRINT @animalID+'  '+@animalName+'  '+@quantity+'  '+@speciesName+'  '+@totalPrice          
        UPDATE #temp
                SET Printed = 1
                WHERE @animalID = animalID
        END


DROP TABLE #temp
GO
4

1 に答える 1

8

エラーは通常+、文字列連結に記号を使用していることを意味します。ただし、1 つ以上の変数が数値 (この場合は整数) です。

私の推測では、これは 40 行目です。

    PRINT 'CustomerID: ' +@customerID

次のようなものを試すことができます。

    PRINT 'CustomerID: ' + cast(@customerID as varchar(255))

おそらく、コードの他の行でもこの問題が発生するでしょう。幸運を。

于 2013-03-27T21:43:12.367 に答える