動態T SQL語句常見問題與解決方案

2021-05-11 08:42:34 字數 3642 閱讀 1925

--> title:

動態t-sql

語句常見問題與解決方案

--> author : wufeng4552

--> date: 2009-11-24 10:11:10 if

object_id

('[tb]')is

notnull

drop

table [tb] go

create

table [tb] (dt nvarchar

(20),id int

)insert

into [tb]

select

'0718093429'

,1 union all

select

'0728043205'

,2 union all

select

'0728032243',3

--1.忘記型別轉換

declare

@value int

set@value=2

declare

@sql varchar

(8000)

--錯誤的寫法

,型別不一致

set@sql=

'select * from tb where id='

+@value

exec

(@sql)/*

訊息245

,層級16

,狀態1

,行10 將

varchar

值'select * from tb where id='

轉換成資料型別

int

時,轉換失敗。 */

--正確寫法

,轉換型別

set@sql=

'select * from tb where id='

+ltrim

(@value)

exec

(@sql)

--或者

exec

('select * from tb where id='

+@value

)--2

.字串邊界符問題

declare

@value varchar

(10)

set@value=

'0728043205'

declare

@sql1 varchar

(8000),@sql2 varchar

(8000),@sql3 varchar

(8000)

--常見錯誤

set@sql1=

'select * from tb where dt='

+@value

set@sql2=

'select * from tb where dt=''+@value+'

print

@sql1

print

@sql2 /*

select * from tb where dt=0728043205

select * from tb where dt='+@value+ */

--正確寫法

set@sql3=

'select * from tb where dt='''

+@value+

''''

print

@sql3 /*

select * from tb where dt='0728043205' */

exec

(@sql1)

exec

(@sql2)/*

訊息105

,層級15

,狀態1,行1

遺漏字元字串

'+@value+'

後面的引號。 訊息

102,層級

15,狀態1,行

1 接近'+@value+'

之處的語法不正確。 */

exec

(@sql3)/*

dtid

-------------------- -----------

07280432052

(1 個資料列受到影響)

*/ --3.表名及欄位名的問題 --

常見錯誤寫法

declare

@tbname sysname

set@tbname=

'tb'

select

*from @tbname go

declare

@tbname sysname

set@tbname=

'[tb]'

exec

sp_executesql n'select * from @tbname'

,n'@tbname sysname'

,@tbname go

--正確寫法

declare

@sql nvarchar

(100),@tbname sysname

select

@tbname=

'tb'

set@sql=

'select * from '

+@tbname

exec

(@sql)go

--或declare

@sql nvarchar

(100),@tbname sysname

select

@tbname=

'tb'

set@sql=

'select * from '

+@tbname

exec

sp_executesql @sql

--4.返回值的問題 --

常見錯誤寫法

declare

@dt sysname

,@sql varchar

(100)

set@sql=

'select @dt=dt from tb where id=1'

exec

(@sql)

select

@dt go

declare

@dt sysname

,@sql varchar

(100)

set@sql=

'select '

+@dt+

'=dt from tb where id=1'

exec

(@sql)

select

@dt go

--正確寫法

declare

@sql nvarchar

(200)

set@sql=

'declare @dt sysname select @dt=dt from tb where id=1 select @dt'

exec

(@sql)

--或者

declare

@sql nvarchar

(200),@dt sysname

set@sql=n'select @dt=dt from tb where id=1'

exec

sp_executesql @sql,n'@dt sysname output'

,@dt output

select

@dt

scrapy常見問題與解決方案

1.輸出不正確 改 結果不變?其實是因為反覆使用命令 scrapy crawl spider o 1.json 時候,增加的輸出資料不會覆蓋,而是繼續往後面新增。2.request不執行 request url,meta callback self.parse2,dont filter true d...

jeesite學習筆記 常見問題與解決

還需要在角色管理裡面的對應角色的角色授權新增對該選單的檢視許可權 最後重啟伺服器即可。如果在生成 時修改了com.thinkgem.jeesite以外的生成包路徑,則需要在spring mvx.xml檔案中新增這個包路徑,具體新增位置是在context component scan標籤中,按照提示新...

layuiAdmin 常見問題與解決方案

由於單頁面版本的視 件和靜態資源模組都是動態載入的,所以可能存在瀏覽器的本地快取問題,事實上我們也考慮到這個,因此,為了避免改動後的檔案未及時生效,你只需在入口頁面 預設為start index.html 中,找到layui.config,修改其version的值即可。version new dat...