Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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
C# 在具有相同参数的同一数据库上给出不同结果的存储过程_C#_Sql_Entity Framework_Stored Procedures_Edmx - Fatal编程技术网

C# 在具有相同参数的同一数据库上给出不同结果的存储过程

C# 在具有相同参数的同一数据库上给出不同结果的存储过程,c#,sql,entity-framework,stored-procedures,edmx,C#,Sql,Entity Framework,Stored Procedures,Edmx,我有一个只在特定情况下给出不同结果的存储过程 当我从SQLServerManagementStudio 2008R2调用它时,它将0作为输出 当我从C#类文件调用它时。它给我1作为输出 我正在使用edmx文件,它肯定会更新 从SSMS[SQL Server Management Studio]调用如下内容 exec proc_GetPrimaryKeyUsageCount 62, 'tblFormula' 这将输出为0 从C#文件调用相同的存储过程,如下所示 _db.GetPrimaryKey

我有一个只在特定情况下给出不同结果的存储过程

当我从SQLServerManagementStudio 2008R2调用它时,它将0作为输出

当我从C#类文件调用它时。它给我1作为输出

我正在使用edmx文件,它肯定会更新

从SSMS[SQL Server Management Studio]调用如下内容

exec proc_GetPrimaryKeyUsageCount 62, 'tblFormula'
这将输出为0

从C#文件调用相同的存储过程,如下所示

_db.GetPrimaryKeyUsageCount(62, "tblFormula");
这将输出为1

存储过程是

CREATE PROCEDURE proc_GetPrimaryKeyUsageCount (  
 @PrimaryKeyColumnId INT  
 ,@PrimaryKeyTable NVARCHAR(max)  
 --,@Response INT OUTPUT  
 )  
AS  
BEGIN  
 DECLARE @counter INT  
 DECLARE @sqlCommand NVARCHAR(max)  
 DECLARE @ForeignKey TABLE (  
  child_table VARCHAR(max)  
  ,child_fk_column VARCHAR(max)  
  )  
 DECLARE @child_table VARCHAR(max)  
 DECLARE @child_fk_column VARCHAR(max)  

 SET @counter = 0  

 INSERT INTO @ForeignKey  
 SELECT child_table = c.TABLE_NAME  
  ,child_fk_column = c.COLUMN_NAME  
 FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE p  
 INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS pc ON pc.UNIQUE_CONSTRAINT_SCHEMA = p.CONSTRAINT_SCHEMA  
  AND pc.UNIQUE_CONSTRAINT_NAME = p.CONSTRAINT_NAME  
 INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE c ON c.CONSTRAINT_SCHEMA = pc.CONSTRAINT_SCHEMA  
  AND c.CONSTRAINT_NAME = pc.CONSTRAINT_NAME  
 WHERE EXISTS (  
   SELECT 1  
   FROM INFORMATION_SCHEMA.COLUMNS  
   WHERE COLUMN_NAME = 'IsDeleted'  
    AND TABLE_SCHEMA = p.TABLE_SCHEMA  
    AND TABLE_NAME = p.TABLE_NAME  
    AND p.TABLE_NAME = @PrimaryKeyTable  
   )  

 DECLARE db_cursor CURSOR  
 FOR  
 SELECT child_table  
  ,child_fk_column  
 FROM @ForeignKey  

 OPEN db_cursor  

 FETCH NEXT  
 FROM db_cursor  
 INTO @child_table  
  ,@child_fk_column  

 WHILE @@FETCH_STATUS = 0  
 BEGIN  
  PRINT 'select count(*) from ' + CAST(@child_table AS VARCHAR) + ' where ' + CAST(@child_fk_column AS VARCHAR) + ' = ' + CAST(@PrimaryKeyColumnId AS VARCHAR)  

  SET @sqlCommand = 'select @cnt=count(*) from ' + CAST(@child_table AS VARCHAR) + ' where ' + CAST(@child_fk_column AS VARCHAR) + ' = ' + CAST(@PrimaryKeyColumnId AS VARCHAR)  

  EXEC sp_executesql @sqlCommand  
   ,N'@cnt int OUTPUT'  
   ,@cnt = @counter OUTPUT  

  IF @counter > 0  
   BREAK  

  FETCH NEXT  
  FROM db_cursor  
  INTO @child_table  
   ,@child_fk_column  
 END  

 SELECT @counter AS [PrimaryKeyUsageCount]  
END  

第一个参数是主键的Id,第二个参数是具有该主键的表的名称

该过程返回同一数据库中其他表中主键的使用计数。如果发现偶数为1,它将返回该计数,否则返回0


如果需要额外的服务,请务必告诉我。

有几个错误可能会导致问题。 插入内容应如下所示:

INSERT INTO @ForeignKey  
 SELECT c.TABLE_NAME,c.COLUMN_NAME  
 FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE p  
 INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS pc ON pc.UNIQUE_CONSTRAINT_SCHEMA = p.CONSTRAINT_SCHEMA  
  AND pc.UNIQUE_CONSTRAINT_NAME = p.CONSTRAINT_NAME  
 INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE c ON c.CONSTRAINT_SCHEMA = pc.CONSTRAINT_SCHEMA  
  AND c.CONSTRAINT_NAME = pc.CONSTRAINT_NAME  
 WHERE EXISTS (  
   SELECT *  
   FROM INFORMATION_SCHEMA.COLUMNS AS isc 
   WHERE isc.COLUMN_NAME = 'IsDeleted'  
    AND isc.TABLE_SCHEMA = p.TABLE_SCHEMA  
    AND isc.TABLE_NAME = p.TABLE_NAME  
    AND p.TABLE_NAME = @PrimaryKeyTable  
   ) 
光标循环后应为:

CLOSE db_cursor
DEALLOCATE db_cursor

但这根本不是我的问题。我的问题是关于我在映射函数中得到的值。