ALTER proc [dbo].[getguest]
as
declare @sql nvarchar(200)
begin
set @sql='select * from guest'
end
go
exec(@sql)错误提示:必须声明变量 '@sql'。
我就奇怪,我都声明了呀,怎么还会出错,请大虾指点
as
declare @sql nvarchar(200)
begin
set @sql='select * from guest'
end
go
exec(@sql)错误提示:必须声明变量 '@sql'。
我就奇怪,我都声明了呀,怎么还会出错,请大虾指点
ALTER proc [dbo].[getguest]
as
begin
declare @sql nvarchar(200)
set @sql='select * from guest'
exec(@sql)
end
go
--出错问题:变量声明在存储过程里,而EXEC调用的@sql是在存储过程外部,所以编译时会提示没有声明变量。--在外部运用EXEC可以:
declare @sql varchar(8000)
set @sql = 'select * from guest'
exec(@sql)
--或直接
exec('select * from guest')
ALTER proc [dbo].[getguest]
as
declare @sql nvarchar(200)
begin
set @sql='select * from guest'
exec (@sql)
end
goexec getguest--exec 存储过程名称
@id int,
@sql nvarchar(200)as
begin
set @id=4
set @sql='select * from guest where id='+cast(@id as char(10))
exec (@sql)
end
goexec getguest--exec 存储过程名称 错误提示:过程 'getguest' 需要参数 '@id',但未提供该参数。
我把变量声明提到最上边就不行了!
ALTER proc [dbo].[getguest]
as
begin
declare @sql nvarchar(200)
set @sql='select * from guest'
exec(@sql)
end
go
@id int
as
begin
@sql nvarchar(4000)
set @sql = N'select * from guest where id = ' + cast(@id as varchar(10))
exec (@sql)
end
goexec getguest '4'
ALTER proc [dbo].[getguest]
@id int
as
begin
declare @sql nvarchar(4000)
set @sql = N'select * from guest where id = ' + cast(@id as varchar(10))
exec (@sql)
end
goexec getguest '4'
@id int,
@sql nvarchar(200)as
begin
set @id=4
set @sql='select * from guest where id='+cast(@id as char(10))
exec (@sql)
end
goexec getguest--exec 存储过程名称@id int,
@sql nvarchar(200)
这两个变量不能这样声明么?