注册 登录
编程论坛 SQL Server论坛

此語句為何無法執行

rgbtdkjcel 发布于 2009-09-15 17:09, 766 次点击
declare @int int
set @int=1
exec('select top'+@int+'* from sql')

請問。為何執行exec時會報錯呢?請問是什麼原因呢?
7 回复
#2
gdy03492009-09-16 12:26
这还真是个难题啊,应该是sqlserver函数里不支持变量,问题出在top上
#3
笨鸟2009-09-16 14:53
declare @int int
set @int=1
exec('select top '+@int+' * from TabName')
#4
gdy03492009-09-16 16:54
回复3楼
我想你最好先试一下看能否执行,你上面写的不和楼主一样吗?
#5
笨鸟2009-09-17 06:44
看看字符串空格细节的差异。。

楼主的:
declare @int int
set @int=1
exec('select top'+@int+'* from sql')

3楼的:
declare @int int  
set @int=1  
exec('select top '+@int+' * from TabName')
#6
zhaoxili2009-09-19 15:45
呵呵 对啊 楼主的是没有注意到语句的空格导致在运行时候 语句连接时候没误认为是一个  所以无法运行   楼主最好以后对于这样需要拼接的语句时候,看看是否存在拼接丢掉空格的问题   这个问题其实是很容易出现 但是又不容易找出的问题
#7
czg1236987412009-09-22 22:50
#8
Vitamin19992009-09-26 15:26
楼主出现三个错误
1,数据库里是优先处理数字的   你需要把@int强转成varchar(20) 然后才能拼装
2,SQL里面的执行的 EXEC (@sql) @sql位置不支持变量的拼装,它只支持符串的拼装
3,字符串之间的空格问题
所以要想处理这样的事情,只能在外面先把串拼好了然后再执行
declare @int int,@sql varchar(100)
set @int=1  
set @sql = 'select top ' + cast(@int as varchar(20)) + ' * from myTable'
exec (@sql)

1