動態執行sql語句拼接字串select中帶有變數

時間 2021-10-17 05:11:04

1樓:在晴天的雨傘

--1. 構造使用in子句的動態transact-sql方法進行編號查詢

--a. 要查詢的欄位型別是數字型

--查詢的值列表

declare @idlist varchar(100)

set @idlist='1,2,3'

--拼接並執行動態transact-sql語句

exec('select * from tbname where fdname in('+@idlist+')')

go--b. 要查詢的欄位型別是字元型

--查詢的值列表已經加上了字串邊界符

declare @idlist varchar(100)

set @idlist='''a'',''b''''a'',''c'''

--拼接並執行動態transact-sql語句

exec('select * from tbname where fdname in('+@idlist+')')

go--查詢的值列表沒有字串邊界符

declare @idlist varchar(100)

set @idlist='a,b''a,c'

--由於是欄位型別是,所以在拼接時,必須為其加上字串邊界符(')

declare @s varchar(1000)

set @s=''''

+replace(replace(@idlist,'''',''''''),',',''',''')

+''''

--拼接並執行動態transact-sql語句

exec('select * from tbname where fdname in('+@s+')')

go--2. 使用like或者patindex進行編號查詢

--查詢的值列表

declare @idlist varchar(100)

set @idlist='1,2,3'

--查詢

select * from tbname where charindex(','+rtrim(fdname)+',',','+@idlist+',')>0

select * from tbname where patindex('%,'+rtrim(fdname)+',%',','+@idlist+',')>0

select * from tbname where ','+@idlist+',' like '%,'+rtrim(fdname)+',%'

go--3. 編號查詢中常見的錯誤

--a. 最容易犯的錯誤:表示式充當表示式列表。

declare @s varchar(100)

set @s='1'

select id,name from sysobjects where id in(@s)

/*--結果

id name

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

1 sysobjects

--*/

set @s='1,2,3'

select id,name from sysobjects where id in(@s)

/*--結果

伺服器: 訊息 245,級別 16,狀態 1,行 3

將 varchar 值 '1,2,3' 轉換為資料型別為 int 的列時發生語法錯誤。

--*/

go--b. 生成動態transact-sql語句時忽略了資料型別。

declare @s varchar(100)

set @s='u,s'

exec('select id,name from sysobjects where id in('+@s+')')

/*--結果:

伺服器: 訊息 207,級別 16,狀態 3,行 1

列名 's' 無效。

伺服器: 訊息 207,級別 16,狀態 1,行 1

列名 'u' 無效。

--*/

go--c. 忽略了比較的精確性問題。

--要查詢的資料

declare @t table(col varchar(10))

insert @t select '1'

union all select '11'

union all select '111'

union all select '22'

--查詢

declare @s varchar(100)

set @s='111,22'

select * from @t where charindex(col,@s)>0

/*--結果

col----------

1 11

11122 -*/go

2樓:匿名使用者

問題在第8行,

請參考第13行的寫法。

第8行要寫出 set @sql=@sql + n' select @i_i '

js字串拼接的問題,JS裡面字串拼接問題

奔流的宵析 拼接過後就是 topage 裡面帶的引數需要單引號 而包裹它的字串也是用了單引號 所以就得用轉義字元 斜槓 來讓拼接的字串正確 首先要明白的是 這個符號的意思是轉義,主要是用來區別語法中的字元和普通輸出字元的。你的 var str 假設id 1 name 張三 你會看的更加清楚。id n...

sql語句中怎樣把日期轉為字串

盤合厚珺婭 這個問題我已經回答了,樓主是mysql資料庫.需要得到yyyymm,應該是.select concat year now month now 秀乞群群 convert data type length expression style 引數expression data type 目標系...

SQL擷取字串,sql如何擷取字元

substring 返回字元 binary text 或 image 表示式的一部分。有關可與該函式一起使用的有效 microsoft sql server 資料型別的更多資訊,請參見資料型別。語法 substring expression start length 引數 expression 是字...