CREATE PROCEDURE p_TestCreat @strTableName as varchar(40) AS begin SET ANSI_WARNINGS ON SET ANSI_NULLS ON exec('select * into '+@strTableName+' FROM TESTf.service.dbo.agent') end GO
把下面的内容加到存储过程里面,看看是否可以 SET ANSI_WARNINGS ON go SET ANSI_NULLS ON GO
SET ANSI_WARNINGS ON go SET ANSI_NULLS ON GO CREATE PROCEDURE p_TestCreat @strTableName as varchar(40) AS ............................. GO
谢谢zjcxc(邹建)大哥,一语中第啊,太厉害了,可是具体原因是什么呢,小弟很想知道,谢谢!!!
SET ANSI_WARNINGS 之类的选项的保留问题.在创建或更改存储过程时,SQL Server 将保存 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 的设置。执行存储过程时,将使用这些原始设置。因此,所有客户端会话的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置在执行存储过程时都将被忽略。在存储过程中出现的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 语句不影响存储过程的功能。 企业管理器中,默认的 SET ANSI_WARNINGS 是off,所以你如果在企业管理器中创建好了,那个SET ANSI_WARNINGS就会一直跟着存储过程 而查询分析器中的默认设置为on,所以你删除存储过程,在查询分析器中创建,则SET ANSI_WARNINGS是正确的设置
@strTableName as varchar(40)
AS
begin
SET ANSI_WARNINGS ON
SET ANSI_NULLS ON
exec('select * into '+@strTableName+' FROM TESTf.service.dbo.agent')
end
GO
错误7405 异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这将确保一致的查询语义。请启用这些选项,然后重新发出查询。
SET ANSI_WARNINGS ON
go
SET ANSI_NULLS ON
GO
go
SET ANSI_NULLS ON
GO
CREATE PROCEDURE p_TestCreat
@strTableName as varchar(40)
AS
.............................
GO
而查询分析器中的默认设置为on,所以你删除存储过程,在查询分析器中创建,则SET ANSI_WARNINGS是正确的设置