oula alsheikh Ответов: 1

Либо параметр @objname неоднозначен, либо заявленный @objtype (столбец) неверен.


у меня есть следующая хранимая процедура, которая делает много задач в соответствии с моей ситуацией
моя проблема не в хранимой процедуре, потому что она отлично работает в sql и делает то, что я хочу
но моя проблема заключается в вызове этой хранимой процедуры в C#.net (Ado.net техника)
потому что когда я вызываю процедуру, я получаю следующее исключение
Либо параметр @objname неоднозначен, либо заявленный @objtype (столбец) неверен.
вызов кода хранимой процедуры
public void CreatePrimaryKeyOnly(string PT,string PK)
        {

            using (SqlConnection connection = new SqlConnection(connection_string))
            {
                connection.Open();
                SqlCommand command = new SqlCommand("CreatePrimaryKeyOnly", connection);
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.Add("@TableName", SqlDbType.VarChar).Value = PT;
                command.Parameters.Add("@ColumnName", SqlDbType.VarChar).Value = PK;
                command.ExecuteNonQuery();
                connection.Close();
            }

        }

а хранимая процедура такова
ALTER Procedure [dbo].[CreatePrimaryKeyOnly]
@TableName nvarchar(255),
@ColumnName nvarchar(255)
as
--Alter Table Sys_Tables Add TableID_Spare  uniqueidentifier Not null Default(newid())
Declare @AddColumn nvarchar(2000)
Set @AddColumn='Alter Table [' + @TableName + '] Add ' + @ColumnName + '_Spare  uniqueidentifier Not null Default(newid()) '
Exec(@Addcolumn)

--delete Basic primary key 
Declare @GetPrimayKeyName nvarchar(2000)
SELECT @GetPrimayKeyName = 'ALTER TABLE [' + @TableName
   + '] DROP CONSTRAINT ' + name + ';'
    FROM sys.key_constraints
    WHERE [type] = 'PK'
    AND [parent_object_id] = OBJECT_ID(@TableName);
	EXEC sp_executeSQL @GetPrimayKeyName

--Sp_rename '[Sys_Tables].TableID','forJoin','Column'
Declare @JoinRenameStatement nvarchar(1000)
Set @JoinRenameStatement='Sp_rename ''['+@TableName+'].'+@ColumnName + ''' , ForJoin,''Column'''
Exec(@JoinRenameStatement )


declare @strsql varchar(2000)
--Primary Key Rename
--Example sp_rename '[Sys_Tables].TableID_Spare' , 'TableID', 'COLUMN'
set @strsql = 'Sp_rename ''['+@TableName+'].'+@ColumnName+ +'_Spare'+ ''' , '''+@ColumnName+''',''Column''' 
exec (@strsql)


declare @PrimaryKeyStatement varchar(2000)
--Alter Table Outcomes Add Constraint OutcomesIDPK Primary Key(OutcomeID)
Set @PrimaryKeyStatement= 'Alter Table ['+ @TableName + '] Add Constraint ' + @ColumnName +  'PK Primary Key(' + @ColumnName + ')'
Exec(@PrimaryKeyStatement)

я попробовал это сделать, чтобы поместить параметр в вызов хранимой процедуры как SqlDbType.NVarChar, но он тоже не работает

пожалуйста, какое-нибудь решение?

Tomas Takac

Ошибка происходит от sp_rename.

Mike Meinz

Может быть, нет имени столбца с именем @ColumnName + '_Spare'

oula alsheikh

в первом заявлении я изменяю таблицу и добавляю столбец acolumn со словом spare так что он существует

1 Ответов

Рейтинг:
2

Kornfeld Eliyahu Peter

Declare @JoinRenameStatement nvarchar(1000)
Set @JoinRenameStatement='Sp_rename ''['+@TableName+'].'+@ColumnName + ''' , ForJoin,''Column'''
Exec(@JoinRenameStatement )

На данный момент такого столбца @TableName нет.@Имя_столбца...Вы изначально создали его с суффиксом s '_Spare', и часть переименует его обратно еще до вас...


oula alsheikh

я уже упоминал, что нет никакой ошибки, когда я вызываю процедуру в SQL Server Management Studio, проблема не в sp_rename или я думаю, что это не от процедуры, а от вызова процедуры

Kornfeld Eliyahu Peter

Конечно, есть - это просто не бросается в глаза...Прочтите свой код, и вы увидите, что порядок неправильный, вы пытаетесь переименовать столбец, который в данный момент не существует!