SqlServer存儲(chǔ)過(guò)程實(shí)現(xiàn)及拼接sql的注意點(diǎn)
這里我昨天碰到的問(wèn)題就是執(zhí)行一段根據(jù)變量tableName對(duì)不同的表進(jìn)行字段狀態(tài)的更改。由于服務(wù)器原因,我不能直接在數(shù)據(jù)訪問(wèn)層寫SQL,所以只好抽離出來(lái)放到存儲(chǔ)過(guò)程里面。
這里就出現(xiàn)了一個(gè)問(wèn)題,我花費(fèi)了好久才弄通!
其實(shí)就是很簡(jiǎn)單的一個(gè)SQL語(yǔ)句:
update table1 set field1=value1,field2 = value2 where id = id
我寫成什么樣子了呢?大家且看:
declare @tableName nvarchar(50), @field1 int, @field2 nvarchar, @id int declare @sql nvarchar(max) set @sql = 'update '+@tableName+' set field1= '+@field1+',field2= '+@field2+' where id='+@id exec @sql
有過(guò)這方面經(jīng)驗(yàn)的同學(xué)肯定知道這樣寫明顯是錯(cuò)的,sql會(huì)報(bào)異常,說(shuō)無(wú)法講nvarchar轉(zhuǎn)換成int類型
那么這個(gè)錯(cuò)誤是具體是值什么呢?其實(shí)就是說(shuō),在拼接sql的時(shí)候,這個(gè)@sql要是一個(gè)字符串類型,所有的變量也都必須用字符串表示,我上面的@field1和@id是int,所以要轉(zhuǎn)化成nvarchar類型,并且是nvarchar類型的變量(字段)必須用單引號(hào)括起來(lái);注:在sql中單引號(hào)是用兩個(gè)單引號(hào)表示的
所以經(jīng)過(guò)修改,正確的拼接sql代碼是:
set @sql='update '+@tableName+ ' set field1='+cast(@field1 as varchar)+',field2='''+@field2+''' where id='+CAST(@id as varchar)
這個(gè)問(wèn)題其實(shí)非常簡(jiǎn)單,但是由于我在SQL方面的知識(shí)很是不足,所以在這里記錄來(lái)鞏固自己。
以上所述是小編給大家介紹的SqlServer存儲(chǔ)過(guò)程實(shí)現(xiàn)及拼接sql的注意點(diǎn),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
SQL Server的鏈接服務(wù)器技術(shù)小結(jié)
這篇文章主要介紹了SQL Server的鏈接服務(wù)器技術(shù)的相關(guān)資料,需要的朋友可以參考下2014-07-07SQL語(yǔ)句計(jì)算兩個(gè)日期之間有多少個(gè)工作日的方法
本文的主要內(nèi)容是用SQL語(yǔ)言計(jì)算兩個(gè)日期間有多少個(gè)工作日,需要的朋友可以參考下2015-08-08SQL Server 遠(yuǎn)程連接服務(wù)器詳細(xì)配置(sp_addlinkedserver)
這篇文章主要介紹了SQL Server 遠(yuǎn)程連接服務(wù)器詳細(xì)配置(sp_addlinkedserver),需要的朋友可以參考下2017-01-01SQL Server 跨庫(kù)同步數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了SQL Server 跨庫(kù)同步數(shù)據(jù)的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02SQL Server服務(wù)啟動(dòng)的實(shí)現(xiàn)步驟
本文主要介紹了SQL Server服務(wù)啟動(dòng)的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07SQL Server中通過(guò)reverse取某個(gè)最后一次出現(xiàn)的符號(hào)后面的內(nèi)容(字符串反轉(zhuǎn))
昨天在項(xiàng)目中遇到了一個(gè)非常簡(jiǎn)單的問(wèn)題,需要把SQL Server數(shù)據(jù)庫(kù)中保存的一段路徑地址取出其文件名,但SQL Server又沒有現(xiàn)成的方法,最后在網(wǎng)上找到這樣的一個(gè)方法,原理是先將字符串反轉(zhuǎn),取出第一個(gè)/的位置,從頭進(jìn)行截取后再次反轉(zhuǎn)2012-07-07SQL語(yǔ)句練習(xí)實(shí)例之二——找出銷售冠軍
在公司中,老板走進(jìn)來(lái),要一張每個(gè)地區(qū)銷量前3名的銷售額與銷售員的報(bào)表2011-10-10生成300個(gè)不同的隨機(jī)數(shù)的SQL語(yǔ)句
最近在做一個(gè)項(xiàng)目,涉及到要生成N個(gè)8位的不重復(fù)的純數(shù)字隨機(jī)數(shù)作為優(yōu)惠碼,研究了一番,把結(jié)果分享給大家2014-08-08