SqlServer存儲進程完成及拼接sql的留意點。本站提示廣大學習愛好者:(SqlServer存儲進程完成及拼接sql的留意點)文章只能為提供參考,不一定能成為您想要的結果。以下是SqlServer存儲進程完成及拼接sql的留意點正文
這裡我昨天碰著的成績就是履行一段依據變量tableName對分歧的表停止字段狀況的更改。因為辦事器緣由,我不克不及直接在數據拜訪層寫SQL,所以只好抽離出來放到存儲進程外面。
這裡就湧現了一個成績,我消費了很久才弄通!
其實就是很簡略的一個SQL語句:
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
有過這方面經歷的同窗確定曉得如許寫顯著是錯的,sql會報異常,說沒法講nvarchar轉換成int類型
那末這個毛病是詳細是值甚麼呢?其實就是說,在拼接sql的時刻,這個@sql如果一個字符串類型,一切的變量也都必需用字符串表現,我下面的@field1和@id是int,所以要轉化成nvarchar類型,而且是nvarchar類型的變量(字段)必需用單引號括起來;注:在sql中單引號是用兩個單引號表現的
所以經由修正,准確的拼接sql代碼是:
set @sql='update '+@tableName+ ' set field1='+cast(@field1 as varchar)+',field2='''+@field2+''' where id='+CAST(@id as varchar)
這個成績其實異常簡略,然則因為我在SQL方面的常識很是缺乏,所以在這裡記載來穩固本身。
以上所述是小編給年夜家引見的SqlServer存儲進程完成及拼接sql的留意點,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!