作者:初始化 | 来源:互联网 | 2022-12-16 14:31
这可以(从SQL编译器的角度)的工作,如果一个指定列t1
被添加到任意的表和一个类型的方法命名c1
也被加入到数据库中.
由于编译器不知道将来可能添加的名称和方法,因此延迟名称解析规则表明它必须接受它.
简而言之,它不是语法错误,因此不会被拒绝.
这样的问题确实应该在调试过程中得到解决,但是如果你想在解析和保存存储过程时捕获,你可以通过这样做来完成它:
create procedure tempsproc
as
select t1.c1
from #t
join t2 on #t.c2 = t3.c3
go
BEGIN TRANSACTION
EXEC tempsproc;
ROLLBACK TRANSACTION
go
类型方法
我被要求解释类型方法,所以在这里.
大多数较新的数据类型(如XML和Spatial)都包含只能在这些数据类型上使用的特殊方法.以下是Microsoft的一个示例:
CREATE TABLE SpatialTable
( id int IDENTITY (1,1),
GeomCol1 geometry,
GeomCol2 AS GeomCol1.STAsText() );
GO
INSERT INTO SpatialTable (GeomCol1)
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));
这显示了两种截然不同的方法格式(GeomCol1.STAsText()
和geometry::STGeomFromText('...')
),这突出了另一点.
此语法符合某些标准(在本例中为OGC).XML方法必须符合不同的标准.他们将来添加的其他数据类型可能必须符合其他标准,这意味着他们必须非常灵活地了解方法的可允许语法,包括它是否有任何括号.
最后,您可能想知道," 但他们不提前知道存在哪些数据类型方法? "令人惊讶的是,答案是"否",因为SQL Server允许将新数据类型添加到现有服务器和数据库中.因此,例如,XML数据类型最初是SQL Server的可选附加组件(扩展)(它们随后被内置到下一个主要版本中).此外,我相信(不确定)客户和第三方也可以自己创建并将它们添加到现有数据库中.
1> RBarryYoung..:
这可以(从SQL编译器的角度)的工作,如果一个指定列t1
被添加到任意的表和一个类型的方法命名c1
也被加入到数据库中.
由于编译器不知道将来可能添加的名称和方法,因此延迟名称解析规则表明它必须接受它.
简而言之,它不是语法错误,因此不会被拒绝.
这样的问题确实应该在调试过程中得到解决,但是如果你想在解析和保存存储过程时捕获,你可以通过这样做来完成它:
create procedure tempsproc
as
select t1.c1
from #t
join t2 on #t.c2 = t3.c3
go
BEGIN TRANSACTION
EXEC tempsproc;
ROLLBACK TRANSACTION
go
类型方法
我被要求解释类型方法,所以在这里.
大多数较新的数据类型(如XML和Spatial)都包含只能在这些数据类型上使用的特殊方法.以下是Microsoft的一个示例:
CREATE TABLE SpatialTable
( id int IDENTITY (1,1),
GeomCol1 geometry,
GeomCol2 AS GeomCol1.STAsText() );
GO
INSERT INTO SpatialTable (GeomCol1)
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));
这显示了两种截然不同的方法格式(GeomCol1.STAsText()
和geometry::STGeomFromText('...')
),这突出了另一点.
此语法符合某些标准(在本例中为OGC).XML方法必须符合不同的标准.他们将来添加的其他数据类型可能必须符合其他标准,这意味着他们必须非常灵活地了解方法的可允许语法,包括它是否有任何括号.
最后,您可能想知道," 但他们不提前知道存在哪些数据类型方法? "令人惊讶的是,答案是"否",因为SQL Server允许将新数据类型添加到现有服务器和数据库中.因此,例如,XML数据类型最初是SQL Server的可选附加组件(扩展)(它们随后被内置到下一个主要版本中).此外,我相信(不确定)客户和第三方也可以自己创建并将它们添加到现有数据库中.