我正在使用 tSQLt(通过 Red Gate 的 SQL 测试版本 1.0.0.455)。 tSQLt 安装在数据库 A 上。我试图通过数据库 A 上的同义词在同一 SQL 服务器实例上的数据库 B 中的表上执行 tSQLt.FakeTable。

代码:



其中 dbo.Bygning 是数据库 A 中的同义词,指的是数据库 B 中的表,而 ObjStatusdbo.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/

10-13 02:11