T-SQL中的参数与变量

在TSQL中,查询语句编译时并不为变量赋值(SET OR SELECT Operation),即变量赋值在编译完成,语句执行时才执行赋值操作,因此查询优化器不一定能为查询语句生成一个合适的执行计划

ex:

DECLARE @Id INT =100;
SELECT * FROM dbo.Users
WHERE UserId>@Id

可以使用以下几种方式修改:

--=====================================================
DECLARE @Id INT =100;
SELECT * FROM dbo.Users
WHERE UserId>@Id
OPTION(RECOMPILE)
--=====================================================
DECLARE @Id INT =100;
SELECT * FROM dbo.Users
WHERE UserId>@Id
OPTION(RECOMPILE(@ID=2));
--=====================================================
SP_EXECUTESQL '
SELECT * FROM dbo.Users
WHERE UserId>@Id',N'@Id INT',@ID=100
--=====================================================
CREATE PROCEDURE dbo.usp_GetUser
(
    @ID INT
)
AS
BEGIN
    SELECT * FROM dbo.Users
WHERE UserId>@Id
END
GO
EXEC dbo.usp_GetUser @ID=100
--=====================================================

 

 存储过程在首次执行时进行编译并缓存以便后续重复调用

ps:此文章参照'大材小用'博客http://www.cnblogs.com/slade/archive/2012/04/29/2476463.html#2367297

 

posted on 2012-05-01 21:47  笑东风  阅读(1352)  评论(2编辑  收藏  举报

导航