iT邦幫忙

0

將 varchar 值 轉換成資料類型 int 時,轉換失敗。

sql

執行下列語法出現錯誤訊息
將 varchar 值 'COND04COND05' 轉換成資料類型 int 時,轉換失敗。

寫入COND01的值希望是 7812
COND01為主KEY

那裡有錯誤
請問如何修改
請各位幫忙了
謝謝。


INSERT INTO MDCOND (COND01,COND02,COND03,COND04,COND05) VALUES ( (convert(int,'COND04'+'COND05')) ,'123','456','78','12'); 



sonia iT邦新手 2 級 ‧ 2018-07-09 09:46:20 檢舉
c
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
暐翰
iT邦大師 1 級 ‧ 2018-07-07 16:20:40

script解決方式可以參考D大的。

這邊另外提供解法給你參考
剛剛在S.O那邊幫你詢問
sql - No trigger to set column's default value from another column in the same table - Stack Overflow

假如想在DBMS端解決問題可以使用

CREATE TABLE MDCOND
    ([COND01]  AS Convert(int,COND04) + Convert(int,COND05)  , [COND02] varchar(5), [COND03] varchar(5), [COND04] varchar(5), [COND05] varchar(5))
;

insert into MDCOND (COND02,COND03,COND04,COND05) values ('123','456','78','12');
select * from MDCOND;

主要邏輯:

設置一個計算欄位,這個欄位是由cond04+cond05相加
insert資料時候添加COND02,COND03,COND04,COND05就好
也符合你要使用cond04+cond05來做PK的概念。

結果圖:

線上測試DEMO

z22344566 iT邦新手 4 級 ‧ 2018-07-07 16:43:17 檢舉

請問有什麼方法可以轉換嗎?

暐翰 iT邦大師 1 級 ‧ 2018-07-07 17:05:43 檢舉

我更新在資料庫解決的方式

0
石頭
iT邦高手 1 級 ‧ 2018-07-07 16:22:07

'COND04'+'COND05' 這段字串含有非整數字串 無法轉型成 int整數

我猜你想要把 COND04+COND05的值當作 當作 COND01的值

你可以考慮把插入 COND04,COND05 值改成參數傳入

這個範例是使用SQL-Server

CREATE TABLE MDCOND(
  COND01  INT,
  COND02  VARCHAR(10),
  COND03  VARCHAR(10),
  COND04  VARCHAR(10),
  COND05  VARCHAR(10)
);

DECLARE @COND04 VARCHAR(10) = '78'
DECLARE @COND05 VARCHAR(10) = '12'

INSERT INTO MDCOND (COND01,COND02,COND03,COND04,COND05) 
VALUES ( (convert(int,@COND04+@COND05)) ,'123','456',@COND04,@COND05); 

dbfiddle

看更多先前的回應...收起先前的回應...
z22344566 iT邦新手 4 級 ‧ 2018-07-07 16:40:39 檢舉

改寫成 VB
無法新增
請問哪裡有寫錯嗎?
謝謝

    Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click

        SqlDataSource1.InsertCommand = "INSERT INTO MDCOND (COND01,COND02,COND03,COND04,COND05) " & _
       "VALUES((convert(INT,@COND01)),@COND02,@COND03,@COND04,'1') "

        SqlDataSource1.InsertParameters.Add("COND01", TXT_CONA02.Text + TXT_CONA04.Text)
        SqlDataSource1.InsertParameters.Add("COND02", TXT_CONA02.Text)
        SqlDataSource1.InsertParameters.Add("COND03", DropDownList1.SelectedValue.ToString)
        SqlDataSource1.InsertParameters.Add("COND04", TXT_CONA04.Text)

        Try

            If SqlDataSource1.Insert() = 1 Then

                CON_STATUS.Text = "成功!"
                ClearTextBox(Page)

            Else
                CON_STATUS.Text = "新增失敗"

            End If
        Catch
            CON_STATUS.Text = "<font style='color: #FF3300'>" + "新增失敗  " + "</font>"

        End Try

    End Sub
小魚 iT邦大師 1 級 ‧ 2018-07-07 17:56:04 檢舉

TXT_CONA02.Text + TXT_CONA04.Text
這字串是數字嗎?
不是數字不能轉換...

z22344566 iT邦新手 4 級 ‧ 2018-07-08 18:05:07 檢舉

是數字...

fuzzylee1688 iT邦研究生 3 級 ‧ 2018-07-09 08:45:34 檢舉

既然是數字, 就不需convert(INT)

優悠 iT邦新手 3 級 ‧ 2018-07-09 11:11:31 檢舉

TEXT剛讀出來式字串,要轉型態INT

0
sonia
iT邦新手 2 級 ‧ 2018-07-09 09:47:52

INSERT INTO MDCOND (COND01,COND02,COND03,COND04,COND05) VALUES ( (select COND04 +COND05 from xxxx where ...) ,'123','456','78','12');

0
grande
iT邦新手 5 級 ‧ 2018-07-09 12:52:06

錯誤的原因是插入時COND04和COND05都還沒有值

分兩段來解決

INSERT INTO MDCOND (COND01,COND02,COND03,COND04,COND05) VALUES(0 ,'123','456','78','12');

UPDATE MDCOND SET COND01=(convert(int,COND04+COND05));

我要發表回答

立即登入回答