0

当我尝试伪造使用用户定义的数据类型的表时,出现以下错误。

COLLATE 子句不能用于用户定义的数据类型。{,1}

看起来这是 tSQLt 中的一个已知问题。

https://groups.google.com/forum/?fromgroups#!topic/tsqlt/AS-Eqy6BjlA

除了更改表定义之外,是否有解决方法?谢谢。

4

1 回答 1

1

感谢 Chris Francisco,现在有一个补丁:

仅供参考,我遇到了同样的问题,并且能够通过深入研究 tSQLt 代码来解决它。有一个名为 Private_GetFullTypeName 的函数

函数返回的最后一列名为“Collat​​ion”,如果变量 @Collat​​ionName 为空,则返回空字符串 ''。如果您将“OR is_user_defined = 1”添加到空字符串的条件中,我就能够伪造具有用户定义数据类型的表。

我没有遇到这种改变带来的任何奇怪的副作用,但我不是 tSQLt(或一般的 tSQLt)内部工作的专家,所以这可能会破坏其他地方的功能。

换句话说:

          CASE WHEN @CollationName IS NULL OR is_user_defined = 1 THEN ''
               ELSE ' COLLATE ' + @CollationName
于 2014-01-03T14:14:33.757 回答