`
wsql
  • 浏览: 11786517 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

where in 加变量问题

 
阅读更多

昨天一个网友问我这样一个问题:

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 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

分享到:
评论

相关推荐

    sqlserver的存储过程与 where in 多值参数

    自己总结的 关于sqlserver存储过程与多值参数的解决办法。

    ThinkPHP有变量的where条件分页实例

    本文实例讲述了ThinkPHP有变量的where条件分页的实现方法。分享给大家供大家参考。 主要功能代码如下: 复制代码 代码如下: $Form= D(‘Announcement’); import(“ORG.Util.Page”); $count = $Form->count(); //...

    oracle存储过程

    SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx; EXCEPTION WHEN NO_DATA_FOUND THEN xxxx; END; ... 3.IF 判断 IF V_TEST=1 THEN BEGIN do something END; END IF; 4.while 循环 WHILE V_...

    浅谈pymysql查询语句中带有in时传递参数的问题

    主要介绍了浅谈pymysql查询语句中带有in时传递参数的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    唯一非聚集索引变量传入时索引失效解决方案

    碰到了一个一个非常慢的SQL server语句,发现是变量查询时很慢 SQL语句: DECLARE @SN VARCHAR(12) SET @SN = '30F335CD0045' SELECT [Mac2] FROM SF_Cp_Detail WHERE [Mac2] = @SN 确认2.查看索引是:唯一非聚集...

    在SQL存储过程中给条件变量加上单引号

    在SQL存储过程中给条件变量加上单引号,不加语句会出问题,以下是在存储过程中将条件where设置成了动态变化的,给where赋完值再和前面的语句拼接,再execute(SQL) set @where= '(DATEDIFF(day,'''+CONVERT(varchar...

    PL/SQL 基础.doc

    IF boolean_expr(条件) THEN /* 加条件语句,当满足条件时候退出循环*/ EXIT; /* EXIT WHEN boolean_expr */ END IF; END LOOP; 2) WHILE 循环 WHILE boolean_expr(条件) LOOP /* boolean_expr 循环条件*/...

    Oracle_存储过程的基本语法

    SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx; EXCEPTION WHEN NO_DATA_FOUND THEN xxxx; END; ... 3.1.3 IF 判断 IF V_TEST=1 THEN BEGIN do something END; END IF; 3.1.4 while ...

    render-vars:添加应在 Express 中的所有视图中呈现的全局变量

    // somewhere in the controllerfunction index ( req , res ) { var locals = { title : 'Home' } ; res . render ( 'home' , locals ) ;} home.ejs (或任何模板语言)在渲染时会有局部变量 {

    thinkPHP控制器变量在模板中的显示方法示例

    本文实例讲述了thinkPHP控制器变量在模板中的显示方法。分享给大家供大家参考,具体... $depart1 = M("Depart") -> where("status=1 and fid=0") -> order("id asc") -> select(); $this -> assign("depart1", $dep

    oracle存储过程语法

    1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN END 存储过程名字 2.SELECT INTO STATEMENT 将select查询的结果存入到变量中...

    使用Windows批处理和WMI设置Python的环境变量方法

    大概在Python2.7.xx以前,安装Python时环境变量是需要自己设的,所以自己做了一个批处理文件.bat来设置环境变量Path,通过WMI命令wmic来实现。 ::检查path中有没有相关路径 echo %path%|findstr /i c:\python27\...

    ThinkPHP Where 条件中常用表达式示例(详解)

    Where 条件表达式格式为: $map['字段名'] = array('表达式', '操作条件'); 其中 $map 是一个普通的数组变量,可以根据自己需求而命名。上述格式中的表达式实际是运算符的意义: ThinkPHP运算符 与 SQL运算符 ...

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别.doc

    但是这样就没有问题: 复制代码 DECLARE @TableName NVARCHAR(50),@Sql NVARCHAR(MAX),@Score INT DECLARE @Sql2 NVARCHAR(MAX) SET @TableName = 't_Student'; SET @Score = 90; SET @sql = 'SELECT * FROM '+...

    SQL子查询、内连接和外连接查询

    1.掌握相关。 2.体会各种查询的异同及相互之间的转换,体会各种查询的执行过程,为综合应用...where sno not in(select sno from Select_Course as SC where cno in( select cno from Course where SC.cno=@Cno ));

    北京中科信软 SAS BASE培训

    1. 导入数据(infile input、import) 第一部分:原始数据分类 1.1标准数据和非标准数据 1.2 数值数据和字符数据 第二部分:data步使用infile+input读入原始数据 2.1 input简单方式 2.2 input列方式(columns)读入 ...

    图解拉格朗日乘子法

    在数学中的最优化问题中,拉格朗日乘数法方法可以将一个有n个变量与k个约束条件的最优化问题转换为一个解有n + k个变量的方程组的解的问题。本文以可视化的形式讲解拉格朗日乘子法,注意,虽然是英语,但是都很简单...

    VB6.0 获取电脑IP地址(源码).rar

     Dim IPA '定义对象和变量  Set objWMI1 = CreateObject("WbemScripting.SWbemLocator") '建立1个WBEM对象的引用指针  Set LOC1 = objWMI1.ConnectServer(".", "root\cimv2") '连接WMI  Set X = LOC1.ExecQuery...

    Linq教程,快速查询

    LINQ的语义: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量中被查询的值 [group by 条件] LINQ的查询返回值的类型是临时变量的类型,可能是一个对象也可能是一个集合。...

    2009 达内Unix学习笔记

    $ 取环境变量的值。 | 管道。把前一命令的输出作为后一命令的输入,把几个命令连接起来。 |经常跟tee连用,tee 把内容保存到文档并显示出来。 三、通用后接命令符 -a 所有(all)。 -e 所有(every),比a更...

Global site tag (gtag.js) - Google Analytics