我正在使用 tSQLt(通过 Red Gate 的 SQL 测试版本 1.0.0.455)。 tSQLt 安装在数据库 A 上。我试图通过数据库 A 上的同义词在同一 SQL 服务器实例上的数据库 B 中的表上执行 tSQLt.FakeTable。
代码:
其中 dbo.Bygning
是数据库 A 中的同义词,指的是数据库 B 中的表,而 ObjStatus
是 dbo.Bygning
中的列
错误信息:
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
[ErrorType109NonTankHasSizeOrVolume].[test AliasTest] failed: An invalid parameter or option was specified for procedure 'sp_addextendedproperty'.{sp_addextendedproperty,37}
有没有办法 tSQLt.FakeTable 同义词表?
说明:
运行测试时出现错误消息。
最佳答案
tSQLt 目前不支持伪造同义词。但是,我认为添加对此的支持可能很容易。我迅速制作了以下修复程序的原型(prototype),希望它可以解决您的问题。你能试试看并确认吗?如果它对你有用,我会确保它进入下一个版本。
ALTER PROCEDURE tSQLt.Private_MarkFakeTable
@SchemaName NVARCHAR(MAX),
@TableName NVARCHAR(MAX),
@NewNameOfOriginalTable NVARCHAR(4000)
AS
BEGIN
DECLARE @UnquotedSchemaName NVARCHAR(MAX);SET @UnquotedSchemaName = OBJECT_SCHEMA_NAME(OBJECT_ID(@SchemaName+'.'+@TableName));
DECLARE @UnquotedTableName NVARCHAR(MAX);SET @UnquotedTableName = OBJECT_NAME(OBJECT_ID(@SchemaName+'.'+@TableName));
DECLARE @Level1Type NVARCHAR(MAX);
SELECT @Level1Type =
CASE type
WHEN 'SN' THEN 'SYNONYM'
ELSE 'TABLE'
END
FROM sys.objects
WHERE object_id = OBJECT_ID(@SchemaName+'.'+@TableName);
EXEC sys.sp_addextendedproperty
@name = N'tSQLt.FakeTable_OrgTableName',
@value = @NewNameOfOriginalTable,
@level0type = N'SCHEMA', @level0name = @UnquotedSchemaName,
@level1type = N'TABLE', @level1name = @UnquotedTableName;
END;
GO
关于sql - 尝试 FakeTable 同义词表时 tSQLt 失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10285651/