昨天乙個網友問我這樣乙個問題:
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...