sqlserverin参数
A. sqlServer跨数据库执行存储,并且这个存储带有表类型参数,需要怎么声明传入
参数定义
单个参数
1> CREATE PROCEDURE HelloWorld1
2> @UserName VARCHAR(10)
3> AS
4> BEGIN
5> PRINT 'Hello' + @UserName + '!';
6> END;
7> go
1> DECLARE @RC int;
2> EXECUTE @RC = HelloWorld1 'Edward' ;
3> PRINT @RC;
4> go
HelloEdward!
0
IN、OUT、IN OUT
注:
SQL Server 的 OUTPUT 需要写在变量数据类型后面。
SQL Server 没有 IN OUT 关键字
OUTPUT 已经相当于 IN OUT 了。
1> CREATE PROCEDURE HelloWorld2
2> @UserName VARCHAR(10),
3> @OutVal VARCHAR(10) OUTPUT,
4> @InoutVal VARCHAR(10) OUTPUT
5> AS
6> BEGIN
7> PRINT 'Hello ' + @UserName + @InoutVal + '!';
8> SET @OutVal = 'A';
9> SET @InoutVal = 'B';
10> END;
11> go
1>
2> DECLARE @RC int, @OutVal VARCHAR(10), @InoutVal VARCHAR(10);
3> BEGIN
4> SET @InoutVal = '~Hi~';
5> EXECUTE @RC = HelloWorld2 'Edward', @OutVal OUTPUT, @InoutVal OUTPUT;
6> PRINT @RC;
7> PRINT '@OutVal=' + @OutVal;
8> PRINT '@InoutVal=' + @InoutVal;
9> END
10> go
Hello Edward~Hi~!
0
@OutVal=A
@InoutVal=B
参数的默认值
1> CREATE PROCEDURE HelloWorld3
2> @UserName VARCHAR(10),
3> @Val1 VARCHAR(20) = ' Good Moning,',
4> @Val2 VARCHAR(20) = ' Nice to Meet you'
5> AS
6> BEGIN
7> PRINT 'Hello ' + @UserName + @Val1 + @Val2 + '!';
8> END;
9> go
1>
2> DECLARE @RC int;
3> BEGIN
4> EXECUTE @RC = HelloWorld3 'Edward';
5> PRINT @RC;
6> EXECUTE @RC = HelloWorld3 'Edward', ' Good Night,';
7> PRINT @RC;
8> EXECUTE @RC = HelloWorld3 'Edward', ' Good Night,', ' Bye';
9> PRINT @RC;
10> END
11> go
Hello Edward Good Moning, Nice to Meet you!
0
Hello Edward Good Night, Nice to Meet you!
0
Hello Edward Good Night, Bye!
0
指定参数名称调用
此部分使用 “参数默认值”那一小节的存储过程。
用于说明当最后2个参数是有默认的时候,如何跳过中间那个。
1> DECLARE @RC int;
2> BEGIN
3> EXECUTE @RC = HelloWorld3 'Edward';
4> PRINT @RC;
5> EXECUTE @RC = HelloWorld3 'Edward', @Val1=' Good Night,';
6> PRINT @RC;
7> EXECUTE @RC = HelloWorld3 'Edward', @Val1=' Good Night,', @Val2=' Bye';
8> PRINT @RC;
9> EXECUTE @RC = HelloWorld3 'Edward', @Val2=' HeiHei ';
10> PRINT @RC;
11> END
12> go
Hello Edward Good Moning, Nice to Meet you!
0
Hello Edward Good Night, Nice to Meet you!
0
Hello Edward Good Night, Bye!
0
Hello Edward Good Moning, HeiHei !
0
B. 关于sqlserver中存储过程里面in关键字的使用
首先就是@chooseid的问题
如果你这样in的话
即使你的 @chooseid=1,2,3
他也会把这几个看做一个整体
也就是把 id 同 '1,2,3'这个整体去比对
而不是拆开
这样的话只能用动态去构建
declare @sql varchar(1000)
set @sql=''
select @sql='delete from table1 where id in ('+ @chooseid+') and uid='+@uid
exec(@sql)
动态构建 也是可以增加@uid的条件的啊...
不太明白你的意思
你可以把代码写全
肯定是可以动态的
写全了 我给你写
C. 带参数的sqlserver存储过程的定义
@是标示符,代表是变量
一个@表示局部变量
两个@表示是全局变量,全局变量是有服务器定义的
D. sqlserver中想用in判断范围,但只能输入一个字符串参数,如何拆字符串然后动态拼in()里面的内容呢
字符串应该类似'a,b,c,d' 或者'1,2,3,4'这样的吧?
拼字符串 set @str='select * from tb where 字段 in ('+char(39)+replace('字符串',',',char(39)+','+char(39)))+char(39)+')'
exec(@str)
就是把'a,b,c,d' 替换成 ('a','b','c','d')
E. sqlserver存储过程如何建立可选参数
SQL Server 中的存储过程(Procere),带入参数和出参数。
存储过程(Procere)-基本创建与操作。
--一、无参存储过程
create procere PTitles
as
select * from titles
go
--2,执行存储过程
execute PTitles
go
--3,移除存储过程
--drop procere PTitles
go
5.存储过程(Procere)-带入参。
create proc P_Titles_ByType
@type char(12) --入参
as
select * from titles where type=@type
go
--,执行带参数的存储过程
--a)方式一
exec P_Titles_ByType @type='business'
go
--b)方式二
exec P_Titles_ByType 'business'
6.存储过程(Procere)-带入参和出参。
create proc P_Titles_ByTypeAndPrice
@type char(12), --入参
@price money --入参
as begin
select * from titles
where type=@type and price>@price
end
F. JDBC连接sqlserver数据库in()参数
你好!
不是你拼接的问题吧我觉得你那个 SQL 在SQLSERVER 客户端就不能执行!
你先把SQL 在客户端正常执行之后,在放入程序哇!
您试试吧!
欢迎追问,谢谢采纳~~
G. mssql2008中,in参数的个数上限是多少。像这样select * from A where A.Num in(1,2,3...)
没上限的吧, IN后面也可以跟 (select num from B),这样的话就是B表里有多少数据就可以查多少
H. sqlserver2008 in的参数传值批量查询
select * from t_user where name in (@name) 这种叫参数化,参数化会被认定为一个字符而不是多个
如果不计效率的话,可以改写为:select * from t_user where ','+@name+',' like '%,'+name+',%'
