Я не говорю, что это хорошо, но если вы действительно хотите проверить, вы можете сделать это в сохраненной процедуре. Ниже приведен краткий пример, который может дать вам несколько вещей, которые вы могли бы реализовать, если хотите. В C # преобразовать int в строку и передать его как в качестве параметра, затем он преобразуется обратно, чтобы убедиться, что они совпадают. В приведенном ниже примере я добавил BIT, как и вы, поэтому ошибка возникает.
CREATE PROCEDURE dbo.pTypeTest
@int BIT ,
@str NVARCHAR(10)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @bitTheSame BIT ,
@intBaseType NVARCHAR(20) ,
@strBaseType NVARCHAR(20);
SELECT @intBaseType = CAST(SQL_VARIANT_PROPERTY(@int,'BaseType') AS NVARCHAR(20));
SELECT @strBaseType = CAST(SQL_VARIANT_PROPERTY(@str,'BaseType') AS NVARCHAR(20));
SELECT @bitTheSame = CASE WHEN CAST(@int AS NVARCHAR(10)) <> @str THEN 0 ELSE 1 END;
IF(@bitTheSame = 0)
BEGIN
DECLARE @message NVARCHAR(200);
SELECT @message = 'Something went wrong, @str: ' + @str + ' does not match @int: '+CAST(@int AS NVARCHAR(10))+' when it has been converted. @str is a '+@strBaseType+' and @int is a '+@intBaseType;
RAISERROR(@message,16,1);
END
IF(@bitTheSame = 1)
BEGIN
PRINT 'Ok';
END
END
Пример:
EXEC dbo.pTypeTest @int = 1000,@str = '1000';
Повышенная ошибка:
Msg 50000, уровень 16, состояние 1, процедура pTypeTest, строка 24 Что-то пошло не так, @str: 1000 не соответствует @int: 1, когда он был преобразован. @str - это nvarchar, а @int - немного