Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 数据库问题中已存在名为的对象_Sql Server_Tsql - Fatal编程技术网

Sql server 数据库问题中已存在名为的对象

Sql server 数据库问题中已存在名为的对象,sql-server,tsql,Sql Server,Tsql,我正在尝试执行一封包含存储过程结果的电子邮件。我正在查看stackoverflow中的其他帖子,但似乎无法通过一个错误,该错误指出“Msg 2714,16级,状态1,过程比较确认,FraudRules,第38行 数据库中已经有一个名为“##ReturnInactiveVerules”的对象。“我在数据库中查找过,没有具有此名称的对象。如有任何关于如何解决此问题的建议,将不胜感激。谢谢 以下是我的SP: BEGIN CREATE TABLE ##returnInactiveRules (

我正在尝试执行一封包含存储过程结果的电子邮件。我正在查看stackoverflow中的其他帖子,但似乎无法通过一个错误,该错误指出“Msg 2714,16级,状态1,过程比较确认,FraudRules,第38行 数据库中已经有一个名为“##ReturnInactiveVerules”的对象。“我在数据库中查找过,没有具有此名称的对象。如有任何关于如何解决此问题的建议,将不胜感激。谢谢

以下是我的SP:

BEGIN

CREATE TABLE ##returnInactiveRules (
    ProductName varchar(100),
    ChannelName varchar(100),
    StrategyCode varchar(100),
    StrategyName varchar(100),
    RuleCode varchar(100),
    RuleName varchar(100),
    On_Off varchar(5)
);

-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
-- SELECT R.RuleCode, R.Name as RuleName, S.StrategyCode, S.Name as StrategyName, R.IsActive
SELECT DISTINCT
    CASE
    WHEN PC.ProductIdentifier='2000' THEN 'GP'
    WHEN PC.ProductIdentifier='1000' THEN 'MB'
    END as ProductName, C.Name as ChannelName, S.StrategyCode, S.Name as StrategyName, R.RuleCode, R.Name as RuleName, 
    CASE
    WHEN R.IsActive = 1 THEN 'On'
    WHEN R.IsActive = 0 THEN 'Off'
    END as On_Off
INTO ##returnInactiveRules
FROM dbo.[Rule] R
INNER JOIN dbo.Strategy S  
on S.KnockoutRuleSet = R.KnockoutRuleSet 
INNER JOIN dbo.RFAI P 
on R.RFAIId = P.RFAIId
INNER JOIN dbo.DecisionStatus D 
on D. StatusId = R. StatusId
LEFT OUTER JOIN dbo.NOAA N 
on N.NOAAId = R.NOAAId
INNER JOIN dbo.RuleQuestionsXRef Q 
ON Q.RuleId = R.RuleId
INNER JOIN ProductChannelStrategyRuleXref X 
ON X.RuleId = R.RuleId 
INNER JOIN ProductChannelStrategy CS 
ON CS.ProductChannelStrategyId = X.ProductChannelStrategyId
INNER JOIN ProductChannel PC
ON PC.ProductChannelId = CS.ProductChannelId
INNER JOIN dbo.Channel C
ON C.ChannelId = PC.ChannelId
WHERE R.IsActive = 0
AND R.RuleCode IN ('F06',
'F07',
'F11',
'F12',
'F14',
'F15',
'F16',
'F17',
'F19',
'F23',
'F25',
'F26',
'F10'
)  
-- ORDER BY R.RuleCode, R.Name;
ORDER BY ProductName, C.Name, S.StrategyCode, S.Name, R.RuleCode, R.Name;

-- SELECT * FROM @returnValue;

-- Email the results in the @returnValue table -- 
    EXEC msdb.dbo.sp_send_dbmail
    @execute_query_database='Prod-XXX',
    @recipients=N'msavoy@xxx.com',
    @body='Attached please find a file with the results.', 
    @subject ='Compare Fraud Rule Results',
    @profile_name ='Reports',
    @query ='EXEC CompareConfirm_Rules',
    @attach_query_result_as_file = 1,
    @query_attachment_filename ='CompareRuleResults.txt'
END
DROP TABLE ##returnInactiveRules;
GO

在开始处使用drop语句,如果它是全局临时表,请确保在任何时候只有一个进程在创建它,因为两个进程不能同时存在


此外,除非您需要其他会话来访问数据,考虑使用临时表,而不是全局临时表,用“{ < /p> < p>”替换“x”语句,在开始时有“滴”语句,如果它是全局临时表,则确保只有一个进程在任何时候创建它,因为两个不能同时存在。p>


此外,除非您需要其他会话访问数据,考虑使用临时表而不是全局临时表,用“< < /P> > P >替换P > > TEMP表,该表从<代码>→< < /COD> >是全局临时表,如果您有2个连接打开,其中一个创建了名为<代码>您将无法从连接2创建相同的表,直到它被2个连接中的任何一个删除

最好使用
#returninactiveverules
,并在创建它之前检查它是否存在

IF OBJECT_ID('tempdb..#returnInactiveRules') IS NOT NULL 
   DROP TABLE #returnInactiveRules
GO

##
开头的临时表是全局临时表,因此,如果您打开了两个连接,其中一个创建了名为
##Temp
的表,则您将无法从连接2创建同一个表,直到它被这两个连接中的任何一个删除

最好使用
#returninactiveverules
,并在创建它之前检查它是否存在

IF OBJECT_ID('tempdb..#returnInactiveRules') IS NOT NULL 
   DROP TABLE #returnInactiveRules
GO

如果存在,请删除它,然后创建表

IF Object_id('tempdb..##returnInactiveRules') IS NOT NULL
  DROP TABLE ##returnInactiveRules

CREATE TABLE ##returnInactiveRules
  (
     ProductName  VARCHAR(100),
     ChannelName  VARCHAR(100),
     StrategyCode VARCHAR(100),
     StrategyName VARCHAR(100),
     RuleCode     VARCHAR(100),
     RuleName     VARCHAR(100),
     On_Off       VARCHAR(5)
  ); 

如果存在,请删除它,然后创建表

IF Object_id('tempdb..##returnInactiveRules') IS NOT NULL
  DROP TABLE ##returnInactiveRules

CREATE TABLE ##returnInactiveRules
  (
     ProductName  VARCHAR(100),
     ChannelName  VARCHAR(100),
     StrategyCode VARCHAR(100),
     StrategyName VARCHAR(100),
     RuleCode     VARCHAR(100),
     RuleName     VARCHAR(100),
     On_Off       VARCHAR(5)
  ); 

当它给出错误时,数据库中已经有一个名为“###ReturnInactiviverules”的对象然后尝试
DROP TABLE###ReturnInactiviverules
如果它成功运行,这意味着数据库中的表
选择*进入###ReturnInactiviverules
这将创建一个新表,您不必提前创建它。尝试更改代码或按照建议执行。为什么要使用全局临时表?由于并发性的挑战,很少有时候应该使用全局临时表。当它发出错误时,数据库中已经有一个名为“##ReturnInactiveVerules”的对象如果它成功运行,则尝试
DROP TABLE##ReturnInactiveVerules
,这意味着数据库中的表
SELECT*进入##returnInactiveVerules
这将创建一个新表,您无需提前创建它。尝试更改代码或按照建议执行。为什么要使用全局临时表?由于并发性的挑战,很少会使用全局临时表。谢谢大家!谢谢你们的帮助,谢谢你们!我感谢你的帮助。