sql轉換成數據類型int時失敗
㈠ sql錛氬皢鏁版嵁綾誨瀷 varchar 杞鎹涓 int 鏃跺嚭閿欍
棣栧厛@sql2鐨勭被鍨嬮敊浜嗭紝絎浜孈column2鐨勭被鍨嬩篃涓嶅癸紝絎涓夛紝鍦ㄥ姩鎬佽鍙ヤ腑娌℃湁鍦╢rom鍓嶉潰鍔犵┖鏍礆紝鍏舵★紝鍔ㄦ佺殑璇濈敤sp_executesql鐨勮瘽錛屼竴嬈′袱鍙ユ槸涓嶈岀殑錛屾敼鎴愯繖鏍鳳細
alter procere select_column1
@column1 nvarchar(10),@column2 nvarchar(10)
as
begin
declare @sql1 nvarchar(200),@sql2 nvarchar(200)
set @sql1='select '+@column1+' from course1'
set @sql2='select '+@column2+' from course1'
exec sp_executesql @sql1
exec sp_executesql @sql2
end
鐒跺悗
exec select_column1 'cname','ccredit'
鏋勬灦鍔ㄦ佽鍙ョ殑鏃跺欑敤nvarchar濂
.....鎴戠煡閬揷credit瀛楁電殑鏁版嵁鏄痠nt鍨嬶紝浣嗕綘浼犲埌瀛樺偍榪囩▼鐨勬槸瀛楁電殑鍚嶅瓧錛屸榗rredit鈥欏綋鐒惰佺敤char鍨嬨
浣犳妸鎴戜笂闈㈤偅涓孌靛嶅埗鍒皊ql閲岃繍琛屼竴涓嬪氨鐭ラ亾浜
㈡ sql server的isnumeric()函數問題!
你這個出錯的原因是 返回的列的數據類型不一樣。
CASE
WHEN isnumeric(天數)=1 then 天數
else 0
END
例如天數是 『7.5』, 那麼上面的語句, 返回 天數, 數據類型是 varchar 的
如果天數是 'abc' , 那麼上面的語句, 返回 0, 數據類型是 int 類型的。
數據類型不一樣了, 因此, 那麼 資料庫會嘗試, 把 varchar 類型的 天數, 轉換為 int
以確保 返回的數據類型一樣。
所以
在將 varchar 值 '7.5' 轉換成數據類型 int 時失敗。
else 0 改成 '0' 就不報錯
是因為這個情況下, 兩種情況, 返回的數據類型, 都是 varchar 類型的。
不需要做任何數據轉換, 因此不會出錯。
㈢ SQL初級問題資料庫在將varchar值 '.. ' 轉換成數據類型 int 時失敗 的問題
insert into Proct (Pname,PSum, PPrice,CId) values('冰箱',300,4000,1),('洗衣機',200,2300, 1)
把pid換成pname就行了,我估計你是筆誤了吧
㈣ SQL:在將 varchar 值 '' 轉換成數據類型 int 時失敗。
SQL語句中的值跟資料庫表中欄位的數據類型不匹配。
要是轉為varchar是可以轉回來的,但是轉為了char類型,所以就轉不回來了,因為char類型有個長度,不足這個長度的會用空格填充,所以一個數字多了很多個空格後就不是合法的數值格式了。
結果再 用相同語句想把類型轉回smallint,就報錯在將 varchar 值 '*' 轉換成數據類型 int 時失敗,注意 :字元varchar轉數據類型int和數據類型int轉字元vachar的語句是不同的。
varchar特點:
1、使用比固定長度類型(char)佔用更少存儲空間(除了使用ROW_FORMAT=FIXED創建的MyISAM表)。
2、使用額外的1-2位元組來存儲值長度,列長度<=255使用1位元組保存,其它情況使用2位元組保存。例如varchar(10)會佔用11位元組存儲空間,varchar(500)會佔用502位元組存儲空間。
3、節約空間,所以性能會有幫助。在更新的時候會產生額外的工作。
4、5.0以上版本,取值或設置值都會保存字元串末尾的空格,4.1之前的版本都會把字元串末尾的空格刪除掉。
5、最大長度遠大於平均長度,很少發生更新的時候適合使用varchar,因為碎片更少了。
以上內容參考:網路-varchar