パラメータを次のように定義してから、正しいパラメータ タイプが使用されたことをアサートするためにsql_variant
使用できます。SQL_VARIANT_PROPERTY
IF OBJECT_ID('dbo.Decimal74Only') IS NOT NULL DROP PROCEDURE dbo.Decimal74Only;
GO
CREATE PROCEDURE dbo.Decimal74Only
@p1 SQL_VARIANT
AS
BEGIN
IF(
SQL_VARIANT_PROPERTY(@p1,'BaseType')<>'decimal'
OR
SQL_VARIANT_PROPERTY(@p1,'Precision')<>7
OR
SQL_VARIANT_PROPERTY(@p1,'Scale')<>4
)
BEGIN
RAISERROR('Wrong Data Type used when calling procedure!',16,10);
RETURN -1;
END;
RAISERROR('Correct Data Type used when calling procedure!',0,0);
END;
GO
RAISERROR('Calling with INT:',0,0);
DECLARE @i INT = 1;
EXEC dbo.Decimal74Only @p1 = @i;
GO
RAISERROR('Calling with DECIMAL(7,4):',0,0);
DECLARE @d74 DECIMAL(7,4) = 1;
EXEC dbo.Decimal74Only @p1 = @d74;
GO