前一句IN的范围有两个值,分别是 ALFKI 和 ANATR。
后一句IN的范围只有一个值,是 ALFDI','ANATR(单引号是字符串值内容)。
有多少个值就要定义多少个参数
exec sp_executesql N'select * from customers where customerid in (@customerid1,@customerid2)',
N'@customerid1 varchar(8000),@customerid2 varchar(8000)',
@customerid1='ALFKI',
@customerid2='ANATR'
后一句IN的范围只有一个值,是 ALFDI','ANATR(单引号是字符串值内容)。
有多少个值就要定义多少个参数
exec sp_executesql N'select * from customers where customerid in (@customerid1,@customerid2)',
N'@customerid1 varchar(8000),@customerid2 varchar(8000)',
@customerid1='ALFKI',
@customerid2='ANATR'
解决方案 »
- 我想在程序运行过程中把数据库A复制一份为B,sql语句如何写
- 求一SQL语句
- 是将多个stored procedure分开执行好,还是合并执行好
- 求一24小时排行的sql语句
- case中的变量
- 火急!!!怎么修改一个数据库的名称同时保持里面的表结构和数据不变?谢谢!
- [microsoft][odbc sql Server Driver][SQL server]对象名无效
- db2 命令行中如何执行sql脚本
- 容易拿分啊!
- SqlServer 2000 删除某个数据库的用户
- select distinct 列名,count(*) from 表名 group by 列名 的结果如何导入另一个表中
- 求帮忙看一个问题,搞不定了,要疯了
额,因为这个@customerid1是不定的,没法确定要定义几个参数
SET @Sql=N'select * from customers where customerid in ('''+'ALFKI'',''ANATR'+''')'
exec sp_executesql @Sql
后一句IN的范围只有一个值,是 ALFDI','ANATR(单引号是字符串值内容)。
值是ALFDI','ANATR,然后会在两端自动插入单引号,那应该就是两个值in ('ALFDI','ANATR')吧
只能这样用
EXEC sp_executesql N'SELECT top 2 * FROM sys.all_objects where Name IN(@Names)',N'@Names NVARCHAR(200)',@Names='sysrscols'
把你的动态执行拿出来看,你就明白了
它等价于DECLARE @customerid VARCHAR(8000)
SET @customerid='ALFKI'',''ANATR'
select * from customers where customerid in (@customerid)
DECLARE @sql nvarchar(max)
DECLARE @customerid nvarchar(max)
SET @customerid=N'''ALFKI'',''ANATR'''
SET @sql = N'select * from customers where customerid in ('+@customerid+N')'
--PRINT @sql
exec sp_executesql @sql
比如set varStr1='abc'+char(39)+'ef',将会得到abc'ef