where in 加變數問題

2021-08-25 14:58:21 字數 3209 閱讀 3549

昨天乙個網友問我這樣乙個問題:

declare @si_names nvarchar(200),@txt nvarchar(4000),@sql as nvarchar(4000)

set @si_names='(''0'',''fcly'',''啦啦啦'',''我愛home'')'

insert into shopemail(si_id,se_friend,se_title,se_content,se_time,se_state,se_isend,se_sendel,se_isdraft)

select '3',id,'測試一下郵箱功能','新增內容:測試一下郵箱功能,請好好配合哦!',getdate(),'0','1','0','0' from shopinfo where si_name in @si_names

卻是報錯誤

insert into shopemail(si_id,se_friend,se_title,se_content,se_time,se_state,se_isend,se_sendel,se_isdraft)

select '3',id,'測試一下郵箱功能','新增內容:測試一下郵箱功能,請好好配合哦!',getdate(),'0','1','0','0' from shopinfo where si_name in ('0','fcly','啦啦啦','我愛home')

卻是ok的

我想到以前我是用動態t-sql處理的

set @sql='select ''3'',id,''測試一下郵箱功能'',''新增內容:測試一下郵箱功能,請好好配合哦!'',getdate(),''0'',''1'',''0'',''0'' from shopinfo where si_name in'+ @si_names

exec(@sql)

沒有問題

但是我一直沒搞清楚原因 你能告訴我麼?

---------------------我發帖後----一網友回答

create

table

shopemail(si_id

varchar(10

),se_friend

varchar(10

),se_title

nvarchar

(100

),se_content

nvarchar

(100

),se_time

datetime

,se_state

varchar(10

),se_isend

varchar(10

),se_sendel

varchar(10

),se_isdraft

varchar(10

))create

table

shopinfo(id

varchar(10

),si_id

varchar(10

),se_friend

varchar(10

),se_title

nvarchar

(100

),se_content

nvarchar

(100

),se_time

datetime

,se_state

varchar(10

),se_isend

varchar(10

),se_sendel

varchar(10

),se_isdraft

varchar(10

),si_name

nvarchar(10

))go

declare

@si_names

nvarchar

(200

),@txt

nvarchar

(4000

),@sql

asnvarchar

(4000

)set

@si_names='

(''0''

,''fcly'',

''啦啦啦'',

''我愛home'')

'--可以將字串 ('0','fcly','啦啦啦','我愛home') 賦給@si_names

/*select '3',id,'測試一下郵箱功能','新增內容:測試一下郵箱功能,請好好配合哦!',getdate(),'0','1','0','0'

from shopinfo where si_name in @si_names

*/--

有語法錯誤,是因為@si_names 只是乙個字串,而不是乙個值列表 in(valueslist).

--這句:

select'3

',id,

'測試一下郵箱功能',

'新增內容:測試一下郵箱功能,請好好配合哦!',

getdate

(),'0'

,'1'

,'0'

,'0'

from

shopinfo

where

si_name in(

'0',

'fcly',

'啦啦啦',

'我愛home')

--in 後面就是乙個值列表

set@sql='

select ''3

'',id,

''測試一下郵箱功能'',

''新增內容:測試一下郵箱功能,請好好配合哦!

'',getdate(),''0

'',''1

'',''0

'',''0

''from shopinfo where si_name in'+

@si_names

--這句執行後,@sql為

select'3

',id,

'測試一下郵箱功能',

'新增內容:測試一下郵箱功能,請好好配合哦!',

getdate

(),'0'

,'1'

,'0'

,'0'

from

shopinfo

where

si_name in(

'0',

'fcly',

'啦啦啦',

'我愛home')

--用 exec(@sql)執行當然沒問題了.

godrop

table

shopemail,shopinfo

TOP字句加SQL變數的相關問題

sql server資料庫中的變數可以載入top字句之後,下文將對top字句加sql變數的相關問題進行討論,供您參考,希望對您學習sql資料庫有所幫助。sql server2005開始,top子句後可以跟常量或者變數,跟常量時可省略括號,即top 2 和top 2是等價的 注意不加括號時top和2間...

MySQL limit後面加變數

如下所示mysql儲存過程中的一段 limit後面加了乙個變數,而不是乙個常量。declare var num1 int set var num1 10 select from test1 limit var num1 mysql 5.5 版本 以上內容在儲存過程裡可以正常執行。mysql 5.5 ...

ubuntu加環境變數

本次的伺服器為 ubuntu server 18.04.1 lts 64位 1.先備份 etc profile 2.新裝的ubuntu系統是沒有root使用者,這時,要先設定root使用者,命令為 sudo passwd 3.在 etc profile中增加 或者可以加在 etc bash.bash...