如下红色部分为什么转换老是出错,我写成定值可以,写成cast(@i as nvarchar)可以,为什么写成cast((@i-1) as nvarchar)就出错呢?
set @str = SUBSTRING(@context,6, 1);
set @i = CAST(SUBSTRING(@context,7, 1) as int);
if @i = 1
begin
set @sql=N'set @strnum = (select top 1 * from LuckyStation.dbo.f_splitstr('''+ rtrim(@win_code) + ''','',''))';
end
else
begin
set @sql=N'set @strnum = (select top ' + CAST(@i as nvarchar) + ' * from LuckyStation.dbo.f_splitstr('''+ rtrim(@win_code) + ''','','')
except
select top '+cast((@i-1) as nvarchar) +' * from LuckyStation.dbo.f_splitstr('''+ rtrim(@win_code) +''','',''))';
end
set @paraDefine = N'@strnum nvarchar(50) output';
exec sp_executesql @sql,@paraDefine,@strnum output
你好,~那个
CAST((@i - 1) AS nvarchar)那里你改成
CAST((@i - 1) AS nvarchar(500))试试.~我以前也碰到这破问题
症状应该跟你的非常类似.
http://www.cnblogs.com/highend/archive/2010/03/13/1685099.html
上面回复的有问题~
这样你先把
exec sp_executesql @sql,@paraDefine,@strnum output注释
--exec sp_executesql @sql,@paraDefine,@strnum output
然后
print @sql;
然后在根据输出去调试看看那的问题.
我一般都用这个方法,很管用!
楼上正确,应该是你没写长度。
这个不一定~我昨晚测试了下不加长度的话CAST是正确的~
还是建议他把PRINT @sql输出后在分析比较稳妥~
@dotNetDR_:你的那一句是要查出前(i+1)条记录是么?如果是,为什么要将(i+1)转换成nvarchar?top后面本来就该是int类型。你不转换试试看。。。
@顾晓北:
这下面的语句没有加 nvarchar(n) 都可以得出结果的.
LZ的问题可能比较复杂了.