テーブルに新しい行が作成されるたびに発生するトリガーを作成しようとしています。その場合、行の挿入方法を反映する挿入クエリが準備されます。このクエリは、別のデータベースのテーブルに格納されます。 挿入トリガーのデータベースに文字列としてクエリを挿入します。
を説明するために:
- データベースAは、テーブル製品(ID、名前、期間、isavailable)を有しています。
- データベースB新しい行(1001 '試験製品'、365、1)A.productsに挿入されると、テーブルするmysql_query(ID、クエリ)
を有し、トリガに以下を挿入しなければなりませんB.mysql_query:
INSERT INTO products (id, name, duration, value, isavailable)
VALUES (1001, test product, 365, 1, 1)
デフォルトでの値は、現時点では常に1になります。
これまでトリガーのコードは次のとおりです。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER c_products
ON migrimi_test.dbo.products
AFTER INSERT
AS
DECLARE @c_id INT;
SET @c_id = (SELECT id from inserted);
DECLARE @c_name INT;
SET @c_name = (SELECT name from inserted);
DECLARE @c_duration INT;
SET @c_duration = (SELECT duration from inserted);
DECLARE @c_isavailable INT;
SET @c_isavailable = (SELECT isvisible from inserted);
BEGIN
SET NOCOUNT ON
INSERT INTO migrimi_temp.dbo.mysql_query (id, mysql_query)
VALUES (DEFAULT, 'INSERT INTO products (id, name, duration, value, isavailable) values ('+CAST(@c_id as nvarchar(50))+', '+'"'[email protected]_name'+'"'+, '[email protected]_duration+', 1, '[email protected]_isavailable+')')
END
GO
私はトリガーを実行すると、後者の挿入を行います。
Conversion failed when converting the nvarchar value 'test product' to data type int.
私はそれが変数@c_name
の置換をいうが、これは私が今まで書く最初のトリガである、と私は間違っている正確に何を言うことができないということを理解する:エラーことわざがあります。
AとBはSQLデータベースです。
'DECLARE @c_name INT; SET @c_name =(SELECT名が挿入されています); 'nameはnvarchar ...' @ c_name'をnvarcharデータ型に変更します。 –
また、1つの 'Select'文を使用することもできます。 '@c_id = id、@c_name = name、@c_duration = duration、@c_isavailable =挿入からisvisibleを選択してください。 –
@WEI_DBA:あなたは正しく、文字列であっても変数c_nameをintとして宣言していました(私の中のnvarchar場合)。また私は別のエラーがあった。それは質問の更新に反映されます。しかし、私はまだこれに似たエラーが発生しています。 –