导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

一个简单的存储过程

wu209000 2008-01-09 09:48:51
SELECT * FROM [stuInfo] WHERE (@kind = @key)
@kind 和 @key 都是可变的. 这有什么错呢.
...全文
104 点赞 收藏 17
写回复
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
spsx99vj 2008-01-10

up
回复
hui_hui_2007 2008-01-10
当两个变量值相同时,显示所有记录;否则不任何显示记录
不过这样做似乎没有什么意义!
-------------------------
是的,我也这样认为,所以我想楼主的意思是,一个是字段名,一个是变量,
我写的示例也是这样
回复
云中客 2008-01-10
例如:
declare @kind int
declare @key int
Select @kind=1,@key=1
SELECT * FROM [stuInfo] WHERE @kind=@key

当两个变量值相同时,显示所有记录;否则不任何显示记录
不过这样做似乎没有什么意义!
回复
云中客 2008-01-10
查询语句中的列名不能用变量(动态)来代替,所以只能使用动态语句来实现

如果@kind不是列名,仅是一个值的话,语句是可以成立的,不过这样做的意义是什么?


回复
rfq 2008-01-10
用动态执行 可以

你想得那种方法不行
回复
qiuming0306 2008-01-10
你声明一样的类型的变量@kind,@key 了吗!2005可以这样查询的!

declare @kind int
declare @key int
SELECT * FROM [stuInfo] WHERE @kind=@key
回复
JL99000 2008-01-10
-- testproc 'wpwp','wpwp'
alter proc testproc
@s varchar(10),
@ss varchar(10)
as
begin
select * from tb where @s=@ss
end
可以这么用啊
楼主请看~~~~
回复
qiuming0306 2008-01-10
没理解楼主的意思,以为只是调语句呢!
如果是字段列名,就只好用动态的sql了
楼上的大神们都解决了!
仰视楼上的星星!
回复
duanzhi1984 2008-01-09
只能用动态语句。因为一般的字符要加单引号
回复
hui_hui_2007 2008-01-09
写个示例看看:

use northwind
declare @kind varchar(50),
@key varchar(50),
@str varchar(100)

set @kind='customerid'
set @key='ALFKI'
set @str='SELECT * FROM [customers] WHERE (' + @kind +'= ''' + @key+''')'
print @STR
exec (@str)
回复
hui_hui_2007 2008-01-09
用动态sql语句.
回复
cxmcxm 2008-01-09
where @kind=@key sql server会把@kind 与@key都当成变量,而不会将@kind当成字段
要应动态的字段,应用动态生成语句,1,3楼的方法都行.
回复
wu209000 2008-01-09
SELECT * FROM [stuInfo] WHERE (@kind = @key)

我用 vs2005的sql server 2005写的. SELECT * FROM [stuInfo] WHERE ([name] = @key)这样就可以查到结果. (name是表里面的字段) 但是把它写成 @kind 再赋值 name 就是找不到
回复
中国风 2008-01-09
---传列名时
declare @kind nvarchar(20),@key nvarchar(20)
select @kind ='Name',@key='sysobjects'
declare @s nvarchar(1000)
set @s='select * from sysobjects where '+@kind+'='''+@key+''''--字符时加上引号
exec(@s)
回复
中国风 2008-01-09
declare @kind int,@key int
select @kind =1,@key=1
SELECT * FROM sysobjects WHERE (@kind = @key) --这样是不会出错的

go
declare @kind nvarchar(2),@key int--两个变量的类型不一致
select @kind ='a',@key=1
SELECT * FROM sysobjects WHERE (@kind = @key) --这样是会出错的
---传列名时

go
declare @kind nvarchar(2),@key int--两个变量的类型不一致
select @kind ='ID',@key=1
declare @s nvarchar(1000)
set @s='select * from sysobjects where '+@kind+'='+rtrim(@key)
exec(@s)
回复
pt1314917 2008-01-09

exec('SELECT * FROM [stuInfo] WHERE '+ @kind + ' = '+ @key)

回复
masuz1 2008-01-09

declare @kind varchar(30)
declare @key varchar(400)
declare @sql nvarchar(4000)
set @kind='name'
set @key='张三'
SET @sql='SELECT * FROM [stuInfo]'
if @kind<>''
SET @sql=@sql+' WHERE ('+@kind+'='''+@key+''')'
exec(@sql)


--说明:只适用于字符串字段查询
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告