日期:2014-05-18  浏览次数:20411 次

请问一个SQL语句~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
select * from 表A where @name=@value 这样写SQL语句可行吗?? @name和@value是参数

------解决方案--------------------
你的意思是字段和值都作为参数吗?
如果是的话。只能用动态SQL

SQL code

create proc wsp
@name varchar(50),
@value varchar(50)
as
   declare @sql varchar(8000)
   set @sql='select * from 表A where ' + @name + '=' + @value 
   exec(@sql)

调用存储过程:exec wsp '',''

------解决方案--------------------
2楼的做法可行。
不过需要进行数据类型的判断,对于文本类型的
@value要两头加"'"号。
SQL code

declare @type varchar(50)
select @type=name from systypes 
where xtype=(
    select xtype from syscolumns where id=object_id(表名) and name=@field
)
if charindex('char',@type,1)>0 or charindex('text',@type,1)>0 or charindex('date',@type,1)>0
    这是文本类型的
else
    非文本类型的

------解决方案--------------------
上面的代码针对于@value值为文本型,如果你的@value值为数值型的话,就可以直接这样:
SQL code

--下面例子使用NorthWind数据库
use NorthWind
declare @name varchar(10)
declare @value varchar(10)
declare @sql varchar(1000)
set @name='EmployeeID'
set @value='9'
select @sql = 'select * from Orders where '+@name+'='+@value

exec(@sql)   
print @sql