编写储存过程中有一疑问
当动态获取值的时候
declare @maxid int
declare @sqlmaxid nvarchar(max)
SET @sqlmaxid = 'SELECT @maxid = max(id)
FROM us
where un= ''' + @un+ '''
'
EXEC sp_executeSQL @sqlmaxid, @params = N'@maxid INT OUTPUT', @maxid = @maxid OUTPUT
但是我直接select @maxid = max(id) from us
同样能得到结果.请问上面方法各有什么不同
------解决方案--------------------
select @maxid = max(id) from us
你这是什么
你在好好看看动态的那个
那个是有where的,而且,where后面的值是传递进来的,所以,知道了吧?
------解决方案--------------------
如果where条件是动态的话,你单纯那句是实现不了的,记住——动态
------解决方案--------------------
这一句通常这样写
declare @maxid int
declare @sqlmaxid nvarchar(max)
SET @sqlmaxid = 'SELECT @maxid = max(id)
FROM us
where un=@un
'
EXEC sp_executeSQL @sqlmaxid, @params = N'@maxid INT OUTPUT,@un varchar(30)', @maxid = @maxid OUTPUT,@un=@un
这种是标准的参数化查询,可以将查询计划重用
而你上面那样拼接语句的话,是达不到重用效果的
select @maxid = max(id) from us where un=@un
其实这也算是参数化查询了