22,209
社区成员
发帖
与我相关
我的任务
分享
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 as nvarchar(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)运行当然没问题了.
go
drop table shopemail,shopinfo
set @si_names='(''0'',''fcly'',''啦啦啦'',''我爱Home'')'
对应where si_name in @si_names in后面不符合语句要求,( ) 是被认为是字符串中的符号,而不是语句要求的括号。
同理,where si_name in ('0','fcly','啦啦啦','我爱Home') 应该是没有问题的。
exec 拼接字符串也没有问题的说。
print @sql
--print 下看看 ,动态里两个分号代表一个分号