尝试创建proc时出现以下错误:
Msg 2714,Level 16,State 1,Procedure create_table_test,Line 11
数据库中已经有一个名为'#tmp'的对象。
该过程基于IF
语句创建临时表,但SQL Server无法识别创建表语句是否在IF中,并且只会执行一个。任何“干净”的方式?
create procedure [dbo].[create_table_test]
AS
BEGIN
set nocount on
if 1=1
create table #tmp (field1 int)
else
create table #tmp (field1 varchar(10))
end
答案 0 :(得分:0)
如果您乐意使用全局临时表,则可以将表的创建分配到两个触发器。这样,SQL Parser就不会感到困惑。
create procedure [dbo].[create_tmpint]
AS
BEGIN
set nocount on
create table ##tmp (field1 int)
end
go
drop procedure create_tmpvar
go
create procedure [dbo].[create_tmpvar]
AS
BEGIN
set nocount on
create table ##tmp (field1 varchar(10))
end
go
drop procedure create_table_test
go
create procedure [dbo].[create_table_test]
AS
BEGIN
set nocount on
if 1=1 begin
exec [dbo].[create_tmpint]
end
else
exec [dbo].[create_tmpvar]
insert into ##tmp values(1)
select * from ##tmp
end
go
如果你运行exec [dbo].[create_table_test]
,你将获得返回的值。
答案 1 :(得分:0)
您可以使用此代码:
CREATE TABLE #tmp (tempColumn int)
IF 1=1
ALTER TABLE #tmp ADD field1 int
ELSE
ALTER TABLE #tmp ADD field1 varchar(10)
ALTER TABLE #tmp DROP COLUMN tempColumn