我有个简单的问题。
我想创建一个查询的存储过程select @wh1 from Table_name where [id]=@wh2 and [name]=@wh3就是有个表。我想用wh1确定要查找的列。用wh2和wh3确定查找的条件
应该怎么办???建立的存储过程怎么执行???
我想创建一个查询的存储过程select @wh1 from Table_name where [id]=@wh2 and [name]=@wh3就是有个表。我想用wh1确定要查找的列。用wh2和wh3确定查找的条件
应该怎么办???建立的存储过程怎么执行???
Declare @S Varchar(1000)
Select @S = 'select ' + @wh1 + ' from Table_name where [id]=' + Rtrim(@wh2) + ' and [name]= ''' + @wh3 + ''''
EXEC(@S)
(
@wh2 INT,
@wh3 varchar(20)
)
AS
BEGIN
select @wh1 from Table_name
where ( ID = @wh2 )
AND( name = @wh3 )
END
GO
-------------
执行
EXECUTE procSelectWh1 'id','name'
写得具体点好不好啊??
你的也是不行啊,,,
--創建測試環境
Create Table TEST(ID Int Identity(1, 1) ,Name Varchar(10), Address Varchar(10))
GO
--插入數據
Insert TEST Select 'AA', 'AAA'
Union All Select 'BB', 'BBB'
Union All Select 'CC', 'CCC'
GO
--建立存儲過程
Create Procedure SP_TEST
(@wh1 Varchar(100),
@wh2 Int,
@wh3 Varchar(100))
As
Begin
Declare @S Varchar(1000)
Select @S = 'select ' + @wh1 + ' from TEST where [id]=' + Rtrim(@wh2) + ' and [name]= ''' + @wh3 + ''''
EXEC(@S)
End
GO
--測試
EXEC SP_TEST 'Name, Address', 1, 'AA'
EXEC SP_TEST 'Name', 2, 'BB'
GO
--刪除測試環境
Drop Table TEST
Drop Procedure SP_TEST
--結果
/*
Name Address
AA AAAName
BB
*/
可以了,谢谢
但是我还想问下
' and [name]= ''' + @wh3 + ''''这里的"'"怎么看的啊?
if @wh1='a'
select a from Table_name where [id]=@wh2 and [name]=@wh3
elseif @wh1='b'
select b from Table_name where [id]=@wh2 and [name]=@wh3
else
select c from Table_name where [id]=@wh2 and [name]=@wh3
可以拆開為這麼看' and [name]= '' ' + @wh3 + ' '' '
1 2 3 4 5 6 一般查詢的時候是這樣的, and name = 'AA'組合動態語句的時候, 一個"'"用兩個代替。1和3是一組單引號,4和6是一組單引號。2和5都是兩個單引號,就是相當於AA前後的單引號。表達能力不好,不知道講明白沒有. :)
我编一个存储过程dbo.formaNo是以字段名做为参数, 写法如下:
CREATE PROCEDURE dbo.formaNo
(
@FieldName char(50),@str char(50)
)
AS
declare @sqlstmt nvarchar(4000) set @sqlstmt='select count(*) from Eval where '+@FieldName+'=''+@str+'''
EXEC sp_executesql @sqlstmt
return
GO
其中表Eval是:
Eid cid uname score1 score2 score3 score4 score5 score6
1 2 admin 良 优 良 合格 良 良
2 2 ldkf 良 优 良 优 合格 优
…………还有很多指标字段score7,score8,score9,score10……,
执行存储过程:
execute formaNo score1,良
但不管参数值怎么改变,其返回结果永远是0,我弄了好久好久都不很有知道哪出错了