我写了这样的一个存储过程
CREATE PROCEDURE [sp_ZLDayCount_LoadData]
AS
--变量定义
declare @lt_tablename as varchar(20) --每日生成表名
declare @yd_tablename as varchar(20)
declare @date as char(8) --操作日期
declare @strsql as varchar(500)
select @date=convert(char(8),getdate()-1,112) --得到前一天的字符串
select @yd_tablename=yd+@date
select @lt_tablename=lt+@date
select @strsql=select SERVICEID,FEETYPE,FEECODE,SRCTERMID,SERVICECODE,MSGOVER into +@yd_tablename+ from [tp1].[mydata].[dbo].[otpdb] where left(createtime,8)="+@date+" and (otpstatus=-1 or otpstatus=0)
execute (@strsql)
GO
在查询分析器中执行时提示"异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这将确保一致的查询语义。请启用这些选项,然后重新发出查询。"(已经将mydata)添加到存储过程操作的数据库中。我在选项-连接属性中选中两个选项,还是不行。只执行成功一次,但没有生成新表。如果将存储过程的代码放到查询分析器里执行没有问题。这是怎么回事呀????
请在查询分析器中创建这个存储过程,以后这个存储过程在企业管理和查询分析器都能修改了。
对于存储过程,SQL Server 使用最初创建存储过程时的 SET ANSI_NULLS 设置值。无论随后何时执行存储过程,SET ANSI_NULLS 的设置都还原为其最初使用的值并生效。当在存储过程内唤醒调用 SET ANSI_NULLS 时,其设置不更改。
在执行分布式查询时应将 SET ANSI_NULLS 设置为 ON。
在执行分布式查询时应将 ANSI_WARNINGS 设置为 ON。
企业管理中的ANSI_NULLS和ANSI_WARNINGS选项不对,但没有方法改动。在查询分析器可以设置ANSI_NULLS和ANSI_WARNINGS选项,而且默认值是对的。所以能在查询分析器创建此类存储过程,而不能在企业管理器创建此类存储过程。
就是:
create proc 名
as
SET ANSI_NULL_DFLT_ON on --注意
SET ANSI_WARNINGS on
select * from open...
--------------------------------------
CREATE PROCEDURE [sp_ZLDayCount_LoadData]
AS
--变量定义
declare @lt_tablename as varchar(20) --每日生成表名
declare @yd_tablename as varchar(20)
declare @date as char(8) --操作日期
declare @strsql as varchar(500)
select @date=convert(char(8),getdate()-1,112) --得到前一天的字符串
select @yd_tablename=yd+@date
select @lt_tablename=lt+@date
select @strsql=select SERVICEID,FEETYPE,FEECODE,SRCTERMID,SERVICECODE,MSGOVER into +@yd_tablename+ from [tp1].[mydata].[dbo].[otpdb] where left(createtime,8)=+@date+ and (otpstatus=-1 or otpstatus=0)
execute (@strsql)
GO