ストアドプロシージャが存在する場合は削除してから、トランザクション内に再作成しようとしています。SQL Server:トランザクションでSPをDROPおよびCREATEできません。
Msg 156, Level 15, State 1, Line 9
Incorrect syntax near the keyword 'PROCEDURE'.
Msg 137, Level 15, State 2, Line 31
Must declare the scalar variable "@date".
そして私は、SETと@dateに波線を持っている:私は上記のスクリプトを実行すると
BEGIN TRANSACTION
BEGIN TRY
IF OBJECT_ID(N'dbo.GET_DATA', N'P') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[GET_DATA]
END
CREATE PROCEDURE [dbo].[GET_DATA]
@date datetime2
AS
SET NOCOUNT ON
BEGIN
SELECT
dbo.Products.product_cod AS 'product_cod',
dbo.Product_Types.name AS 'product_type_name',
dbo.UM.name AS 'um_name',
dbo.Products.category_id AS 'category_id',
dbo.Bins_Products.bin_id AS 'product_bin_id'
FROM dbo.Products
LEFT JOIN dbo.Product_Types on Products.product_type_id = Product_Types.product_type_id
LEFT JOIN dbo.UM on Products.um_id = UM.um_id
LEFT JOIN Bins_Products ON Bins_Products.product_id = Products.product_id
WHERE
Products.update_date >= @date
END
COMMIT TRANSACTION
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS 'ErrorMessage'
ROLLBACK TRANSACTION
END CATCH
は、私は次のエラーを取得します。
IF文とcreate文は、すべて単独で動作します。
作成手順の前にGO文がなくなり、try/catchブロックを使用することはできません。 –
'CREATE PROCEDURE'と' DROP PROCEDURE'はトランザクション的には行えません。代わりに、空のプロシージャをまだ作成していなければ( 'CREATE PROCEDURE GET_DATA AS BEGIN RETURN END')、次に' ALTER'を無条件に作成します。 –
@DeanSavović私はGOを使ってみましたが、それは他のエラーしか作成しません。 – dmdany07