如下红色部分为什么转换老是出错,我写成定值可以,写成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
5 回答
元芳怎么了
TA贡献1798条经验 获得超7个赞
@dotNetDR_:你的那一句是要查出前(i+1)条记录是么?如果是,为什么要将(i+1)转换成nvarchar?top后面本来就该是int类型。你不转换试试看。。。
饮歌长啸
TA贡献1951条经验 获得超3个赞
@顾晓北:
这下面的语句没有加 nvarchar(n) 都可以得出结果的.
LZ的问题可能比较复杂了.
USE master
go
DECLARE @sql nvarchar(500)
DECLARE @i int
SET @i = 9
SET @sql = 'SELECT TOP (' + CAST((@i + 100) AS nvarchar) + ') * FROM sys.all_objects'
PRINT @sql
EXEC sp_executesql @sql
go
DECLARE @sql nvarchar(500)
DECLARE @i int
SET @i = 9
SET @sql = 'SELECT TOP (' + CAST((@i + 100) AS nvarchar) + ') * FROM sys.all_objects'
PRINT @sql
EXEC sp_executesql @sql
- 5 回答
- 0 关注
- 537 浏览
添加回答
举报
0/150
提交
取消