我创建一个函数,内容如下,
老是报错:必须声明变量@sql,请问错在哪里?
CREATE FUNCTION dbo.get_seq
(@seq_table_name nvarchar)
RETURNS numeric(18) AS
BEGIN
declare @seq_no numeric(18)
declare @sql nvarchar(200) @sql='insert into ' + @seq_table_name + '(null_col) values(null)'
exec (@sql) @sql='set @seq_no=(select max(seq_no) from ' + @seq_table_name + ')'
exec (@sql)
RETURN(@seq_no)
END
老是报错:必须声明变量@sql,请问错在哪里?
CREATE FUNCTION dbo.get_seq
(@seq_table_name nvarchar)
RETURNS numeric(18) AS
BEGIN
declare @seq_no numeric(18)
declare @sql nvarchar(200) @sql='insert into ' + @seq_table_name + '(null_col) values(null)'
exec (@sql) @sql='set @seq_no=(select max(seq_no) from ' + @seq_table_name + ')'
exec (@sql)
RETURN(@seq_no)
END
(@seq_table_name nvarchar)
RETURNS numeric(18) AS
BEGIN
declare @seq_no numeric(18)
declare @sql nvarchar(200)--这里价格select给@sql赋值
select @sql='insert into ' + @seq_table_name + '(null_col) values(null)'
exec (@sql)
--这里也是
select @sql='set @seq_no=(select max(seq_no) from ' + @seq_table_name + ')'
exec (@sql)
RETURN(@seq_no)
END
CREATE FUNCTION dbo.get_seq_unit()
RETURNS numeric(18) AS
BEGIN
declare @seq_no numeric(18) insert into seq_unit(null_col) values (null) set @seq_no=(select max(seq_no) from seq_unit) RETURN(@seq_no)END
create proc dbo.sp_GetSeqUnit
as
declare @seq_no numeric(18)
insert into seq_unit(null_col) values (null)
select @seq_no = max(seq_no) from seq_unit
RETURN(@seq_no)
go
----执行存储过程,获得返回值
declare @seq_no numeric(18)
exec @seq_no = dbo.sp_GetSeqUnit
select @seq_no
----------------------------------------------------------------------------------
这个变量名是指表变量,而不是表名称字符串变量.如果是后者,必须使用动态SQL.
执行起来总是报错:必须声明标量变量@seq_no
CREATE proc dbo.sp_GetSeq
(@seq_name [nvarchar](30)
,@seq_no numeric(18) output
)
as
declare @sql nvarchar(200)
set @sql='insert into ' + @seq_name + '(null_col) values(null)'
exec (@sql)
set @sql='set @seq_no=(select max(seq_no) from ' + @seq_name + ')'
exec (@sql)GO
(@seq_name [nvarchar](30)
,@seq_no numeric(18) output
)
as
declare @sql nvarchar(200)
set @sql='insert into ' + @seq_name + '(null_col) values(null)'
exec (@sql)
set @sql=N'set @seq_no=(select max(seq_no) from ' + @seq_name + ')' exec sp_executesql @sql,N'@seq_no numeric(18) output',@seq_no output
GO
如果是,根本不用写这么复杂,用@@IDENTITY就可以如果是在触发器改的seq_no值,就只能这样了