重複の可能性:
SQL メッセージ 8114、レベル 16、状態 5、プロシージャ sp_product_listing、行 0 データ型 varchar から datetime への変換エラー
これは、私の学校の別の学期の誰かが少し前に尋ねたのを見たことがあります.笑. しかし、彼らが得た答えは、私を本当に満足させるものではありませんでした. 他の質問へのリンクは次のとおりです。SQL Msg 8114、Level 16、State 5、Procedure sp_product_listing、Line 0 Error conversion data type varchar to datetime .
私はSQLに非常に慣れていないので、答えが言うことのほとんどは私にはあまり意味がありません。これについて別の議論を開くことができれば、それは素晴らしいことです. 特に、最近私の質問で行われている教師のバッシングを除いて...
次のステートメントは正常に完了しますが、次のようになります。
CREATE PROCEDURE sp_product_listing
(
@product varchar(30),
@month datetime,
@year datetime
)
AS
SELECT
'product_name' = products.name,
products.unit_price,
products.quantity_in_stock,
'supplier_name' = suppliers.name
FROM
suppliers
INNER JOIN
products ON suppliers.supplier_id = products.supplier_id
INNER JOIN
order_details ON products.product_id = order_details.product_id
INNER JOIN
orders ON order_details.order_id = orders.order_id
WHERE
products.name = @product
AND MONTH ('orders.order_date') = @month
AND YEAR ('orders.order_date') = @year;
GO
プロシージャを実行しようとすると、次のエラー メッセージが表示されます。
メッセージ 8114、レベル 16、状態 5、プロシージャ sp_product_listing、行 0
データ型 varchar を datetime に変換中にエラーが発生しました。
ストアド プロシージャを実行する方法は次のとおりです。
EXECUTE sp_product_listing @product = 'Jack%', @month = 'June', @year = 2001;
GO
datetime
2 つのデータ型を varchar に変更しようとしましたが、列自体がdatetime
元々データ型であるため、うまくいきませんでした。ここで何が欠けているのかわかりませんか?
アップデート:
これは、 https://stackoverflow.com/users/1554034/valexによって導かれる最終的な解決策でした。
CREATE PROCEDURE sp_product_listing
(
@product varchar(30),
@month int,
@year int
)
AS
SELECT
'product_name' = products.name,
products.unit_price,
products.quantity_in_stock,
'supplier_name' = suppliers.name
FROM
suppliers
INNER JOIN
products ON suppliers.supplier_id = products.supplier_id
INNER JOIN
order_details ON products.product_id = order_details.product_id
INNER JOIN
orders ON order_details.order_id = orders.order_id
WHERE
products.name LIKE @product
AND MONTH (orders.order_date) = @month
AND YEAR (orders.order_date) = @year;
GO
また、まだ読んでいる人のために、これが私の先生が私に与えた解決策で、同じ結果が得られます.
CREATE PROCEDURE sp_product_listing
(
@product varchar(30),
@month varchar(10),
@year char(4)
)
AS
SELECT
'product_name' = products.name,
products.unit_price,
products.quantity_in_stock,
'supplier_name' = suppliers.name
FROM
suppliers
INNER JOIN
products ON suppliers.supplier_id = products.supplier_id
INNER JOIN
order_details ON products.product_id = order_details.product_id
INNER JOIN
orders ON order_details.order_id = orders.order_id
WHERE
products.name LIKE @product
AND DATENAME(MONTH,orders.order_date) = @month
AND YEAR (orders.order_date) = @year;
GO