日期:2014-05-17  浏览次数:20424 次

关于sp_executesql的问题

declare @sql Nvarchar(100)
set @sql='select top @count from testtable'
exec sp_executesql @sql,N'@count varchar(10)',@count='10'

大家帮忙看下这句为什么不能执行?

------解决方案--------------------
@count 动态SQL变量前后加+
------解决方案--------------------

DECLARE @count INT 
SET @count = 10 
SELECT TOP @count FROM testable

-- 以上语句能执行吗?  不能, 因为 SELECT 里面的字段名不能用变量代替.  你犯的是同一错误.
-- 可以改成这样

DECLARE @count INT , @SQL varchar(max) 
SET @count = 10 
SET @SQL = 'SELECT TOP ' + @count + ' FROM testtable' 

EXEC(@SQL)

------解决方案--------------------
declare @sql Nvarchar(100)
set @sql='select top (@count) ID from  testtable'
exec sp_executesql @sql,N'@count int',@count='10'

------解决方案--------------------
declare @sql Nvarchar(100)
set @sql='select top (@count) ID from  testtable'
exec sp_executesql @sql,N'@count int',@count='10'