亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

sqlserver 動態sql cast出錯

sqlserver 動態sql cast出錯

長風秋雁 2018-12-07 04:22:52
如下紅色部分為什么轉換老是出錯,我寫成定值可以,寫成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貢獻1864條經驗 獲得超2個贊

樓上正確,應該是你沒寫長度。

查看完整回答
反對 回復 2019-01-07
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

這個不一定~我昨晚測試了下不加長度的話CAST是正確的~

還是建議他把PRINT @sql輸出后在分析比較穩妥~

查看完整回答
反對 回復 2019-01-07
?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

@dotNetDR_:你的那一句是要查出前(i+1)條記錄是么?如果是,為什么要將(i+1)轉換成nvarchar?top后面本來就該是int類型。你不轉換試試看。。。

查看完整回答
反對 回復 2019-01-07
?
飲歌長嘯

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
查看完整回答
反對 回復 2019-01-07
  • 5 回答
  • 0 關注
  • 553 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號