【发布时间】:2012-02-14 21:25:56
【问题描述】:
我正在尝试在存储过程中执行内联 SQL 语句。我正在使用 SQL Server 2008。
问题是我无法执行第一个内联语句(带有WHERE 子句)。它崩溃是因为EXEC(...) 中的字符串是动态创建的,并且所有连接的变量必须是varchar 类型。
调用过程时出现的错误:
在上下文中指定的非布尔类型的表达式 预期条件,接近“订单”。
过程如下:
CREATE PROCEDURE loadMyRows
@table_name nvarchar(50),
@bounding_box varchar(8000)
AS
BEGIN
-- *********************************** COMMENT *********************************
-- ** This two code lines are correct and will return true (1) or false (0), **
-- ** but they doesn't work within inline EXEC(...) **
--DECLARE @bb geometry = geometry::STGeomFromText(@bounding_box, 4326);
--select TOP(5) wkt.STWithin(@bb) AS 'bool'
-- *********************************** COMMENT *********************************
IF @bounding_box <> ''
BEGIN
DECLARE @bb geometry = geometry::STGeomFromText(@bounding_box, 4326);
EXEC(
'SELECT TOP (' + @row_limit + ') * ' +
'FROM ' + @real_table_name + ' ' +
'WHERE wkt.STWithin('+@bb+') ' + -- <-- doesn't work :-(
-- 'WHERE wkt.STWithin(geometry::STGeomFromText('''+@bounding_box+''', 4326)) ' +
-- ^^ doesn't work, too :-(
'ORDER BY id ASC '
);
END
ELSE
BEGIN
EXEC(
'SELECT TOP (' + @row_limit + ') * ' +
'FROM ' + @real_table_name + ' ' +
'ORDER BY id ASC'
);
END
END
【问题讨论】:
标签: sql-server sql-server-2008 dynamic exec inline