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

急急急!!!如何在存储过程里设置变量的值???
if object_id('table1') is not null
  drop table table1
go
create table table1

Field1 varchar(100),
Field2 varchar(100),
Field3 varchar(100)
)
go
insert into table1 values('1','2','3')
go
if object_id('Pro1') is not null
  drop PROCEDURE Pro1
go
CREATE PROCEDURE [dbo].[Pro1](
@strWhere varchar(500) = NULL
)
AS
begin
  DECLARE @strSql nvarchar(max)
DECLARE @A1 varchar(100)
DECLARE @A2 varchar(100)

set @A1 = 'c'
SET @strSql= 'select @A1=Field1,@A2=Field2 from table1 ' + @strWhere

EXEC sp_executesql @strSql
print 1
print @A1
end
go
exec dbo.Pro1 ' where Field3=''3'''
问题:在调试存储过程Pro1时,不知道如何给@A1,@A2赋值,上面的方法,显然是错误的,但是我为了加上条件@strWhere,不知道该如何写,才能给它们赋值。。。还请大侠们指点。。。
上面的实行结果是:
(1 行受影响)
消息 137,级别 15,状态 1,第 1 行
必须声明标量变量 "@A1"。
1
c
===============================
另外的问题print @A1为何会报错,变量也声明了。。。
我希望的结果是打印出@A1的值是1,@A2的值是2。。。

------解决方案--------------------
SQL code

--示例
declare @sql1 nvarchar(2000) 
declare @cou int 
declare @id nvarchar(20) 
set @id='1' 
set @sql1='select @count=count(*) from tablea where id=@id' 
exec sp_executesql @sql1, N'@count int out,@id varchar(20)', @cou out ,@id 
select @cou