在存储过程中,要实现的内容如下:
传入一个整型参数@aaa,然后与数据库B表中的bbb字段(整型)进行与运算,判断与后的结果是否大于0,如果大于0,就返回真,否则假.
希望大家能帮忙~~~
传入一个整型参数@aaa,然后与数据库B表中的bbb字段(整型)进行与运算,判断与后的结果是否大于0,如果大于0,就返回真,否则假.
希望大家能帮忙~~~
解决方案 »
- 数据绑定控件的常识问题
- asp和asp.net如何在一个网站上共用一个cookie?
- ASP.NET关于数据库绑定
- asp.net导出EXCEL问题!
- membership地提供程序问题
- ■ 多表 JOIN 怎么进行 搜索 在线等待 马上结帖!
- 高分求怎样给asp.net(c#语言)网站加密!!!在线三天等。。。。
- 求教:我打开我的web项目出现如下的错误(打不开项目),请求帮忙解决。
- 简单问题,向大家请教!
- "Access"数据库,sql查询语句,查询前十条时,如果第十一条数据和第十条数据相等时,则会查询出十一条数据
- vs2005里面,如何得到行中模板列中的控件,;)有代码;在线等,
- 函数调用问题!!高手指教/
@aaa int
as
declare @bbb int
select @bbb = bbb from [你要比较的表] where [条件]
create proc test1
@aaa int --传入的参数
as
declare @bbb int
--取你要比较的值
select @bbb = bbb from [你要比较的表] where [条件]if (@aaa - @bbb > 0)
return true
else
return falseGO
在前台接这个存储返回的值就可以了
set @sqlstr='select * from b where (bbb&'+@aaa+')>0'
exec sp_executesql @sqlstr我这样不能执行成功,但是如果我写成下面这样就可以执行select * from b where (bbb&@aaa)>0
set @input = 10
declare @a int
select @a = @input&col from table
if(@a >1)
begin
print '大于0'
end
else
begin
print '小于或等于0'
end
declare @sqlstr nvarchar(1024)
set @sqlstr='select * from b where (bbb&'+@aaa+')>0'
exec sp_executesql @sqlstr
我如果不用存储过程的话,可以实现动态的sql语句.
难道在sql里面实现的,就不能用在存储过程中吗?
set @input = 1233
select * from orders where @input&orderid>0
declare @aaa int
set @aaa = 0
select * from b where (bbb&@aaa)>0
use northwind
go
create proc test
@input int
as
select * from orders where @input&orderid>0exec test 1
exec test 10
但是我现在是要动态的添加条件,这种方法是不可行的...
我现在用的这种方法
declare @sqlstr nvarchar(1024)
set @sqlstr='select * from b where (bbb&'+@aaa+')>0'
exec sp_executesql @sqlstr系统默认把'select * from b where (bbb&'来我@aaa进行与运算,这当然是错误,我现在就是不知道该怎么改,才能使得bbb和@aaa进行与???
set @input = 1
declare @sqlstr nvarchar(1024)
set @sqlstr='select * from orders where (orderid&@input_)>0'
exec sp_executesql @sqlstr ,N'@input_ int',@input_=@input
所以你应该这样写set @sqlstr='select * from b where (bbb&cast('''+@aaa+''' as int))>0'bbb应该不用写成cast(bbb as int)如果你行你再将bbb写强制转换
存储过程中直接用这句select case when (@aaa & (select bbb from table_name where bbb=800))=0 then 'true' else 'false' end
也可以
declare @input int
set @input = 1
declare @sqlstr nvarchar(1024)
set @sqlstr='select * from orders where (orderid&@input_)>0'
exec sp_executesql @sqlstr ,N'@input_ int',@input_=@input今天停电了,没有回复,不好意思啊!!!你的这种方法我昨天试了真的可以,以前我只用了exec sp_executesql @sqlstr,而没有在后面加参数,不过我感到奇怪,用exec sp_executesql @sqlstr的话,一定要在这个后面定义参数么?
我直接用set @sqlstr='select * from orders where (orderi&'+@input+')>0',为什么就不行呢,系统就会提示"将 varchar 值 'select * from b where bbb=' 转换为数据类型为 int 的列时发生语法错误。"
然后建了个存储过程;
ALTER PROCEDURE dbo.test
(
@aaa int,
@ccc varchar(50)
)
AS/*方案一 正确
declare @sqlstr nvarchar(1024)
set @sqlstr='select * from b where (bbb&@aaa_)>0'
exec sp_executesql @sqlstr,N'@aaa_ int',@aaa_=@aaa
*//*测试二 错误
declare @sqlstr nvarchar(1024)
set @sqlstr='select * from b where (bbb&'+@aaa+')>0'
exec sp_executesql @sqlstr
*//*测试三 正确
declare @sqlstr nvarchar(1024)
set @sqlstr='select * from b where bbbb='''+@ccc+''''
exec sp_executesql @sqlstr
*//*测试四 错误
declare @sqlstr nvarchar(1024)
set @sqlstr='select * from b where bbb='+@aaa
exec sp_executesql @sqlstr
*/希望大家能指出其中的错误是为什么,谢谢!!!
set @sqlstr='select * from orders where (orderi&'+@input+')>0'
这种新式是动态拼装SQL语句,''里的数据是字符串了,也就是varchar类型的了
sp_executesql 是 运行时生成语句 ,这个和动态拼装SQL语句有着天壤之别
你在SQL SERVER 联机帮助里查看下sp_executesql的说明就不难理解了
我原来是直接用在.net里面用sql语句,用sqlcommand执行
比如string sqlstr="select * from orders where (orderi&"+@input+")>0";我以为在存储过程也是一样,原在存储过程中动态构造sql是行不通的,害得我一直找不出错误来,真的非常感谢你啊!!!
我现在再看看联机帮助...