Sql server 存储过程SQL中的Where子句
存储过程新手-有人能帮我解决这个问题吗?我想实现以下简单的目标: 更新表A设置列A=新值,其中列A=旧值 但是将其转换为存储过程是有问题的Sql server 存储过程SQL中的Where子句,sql-server,stored-procedures,Sql Server,Stored Procedures,存储过程新手-有人能帮我解决这个问题吗?我想实现以下简单的目标: 更新表A设置列A=新值,其中列A=旧值 但是将其转换为存储过程是有问题的 alter PROC test_proc @ColumnValue as Varchar(100), @TableValue as Varchar(50), @NewValue as Varchar(50), @OldValue as Varchar(50) as begin Declare @Pointer VarChar(1000) Declar
alter PROC test_proc
@ColumnValue as Varchar(100),
@TableValue as Varchar(50),
@NewValue as Varchar(50),
@OldValue as Varchar(50)
as
begin
Declare @Pointer VarChar(1000)
Declare Test_Cur Cursor For
Select 'Update ' + TABLE_NAME + ' set ' + COLUMN_NAME + ' = ''' + @NewValue + ''''
From INFORMATION_SCHEMA.COLUMNS
Where column_name = @OldValue
and column_name = @ColumnValue
and TABLE_NAME like @TableValue
Open Test_Cur
-- Loop the cursor and execution of requests
Fetch Next From Test_Cur Into @Pointer
While (@@Fetch_Status = 0)
Begin
Print @Pointer
Execute (@Pointer)
Fetch Next From Test_Cur Into @Pointer
End
-- Closing the cursor and releasing resources
Close Test_Cur
Deallocate Test_Cur
Print 'Update complete!'
end
exec dbo.test_proc @ColumnValue = 'USERCHANGED',@TableValue = 'H_%', @OldValue = '12', @NewValue = '14'
如果我删除“Where column_name=@OldValue”这一行,问题就会出现,但这并不能帮助我实现目标。请提供建议。这是光标的逻辑:
Select 'Update ' + TABLE_NAME + ' set ' + COLUMN_NAME + ' = ''' + @NewValue + ''''
From INFORMATION_SCHEMA.COLUMNS
Where column_name = @OldValue and
----------^
column_name = @ColumnValue and
----------^
TABLE_NAME like @TableValue;
第一和第二个条件相互冲突。我认为你的意图只是:
Select 'Update ' + TABLE_NAME + ' set ' + COLUMN_NAME + ' = ''' + @NewValue + ''''
From INFORMATION_SCHEMA.COLUMNS
Where column_name = @ColumnValue and
TABLE_NAME like @TableValue;
您可能希望将@ColumnValue
重命名为类似于@ColumnName
的名称,这似乎更适合它的使用
编辑:
我认为你的意图是:
Select 'Update ' + TABLE_NAME + ' set ' + COLUMN_NAME + ' = ''' + @NewValue + ''' where ' + COLUMN_NAME + ' = ''' + @NewValue + ''''
From INFORMATION_SCHEMA.COLUMNS
Where column_name = @ColumnValue and
TABLE_NAME like @TableValue;
这是光标的逻辑:
Select 'Update ' + TABLE_NAME + ' set ' + COLUMN_NAME + ' = ''' + @NewValue + ''''
From INFORMATION_SCHEMA.COLUMNS
Where column_name = @OldValue and
----------^
column_name = @ColumnValue and
----------^
TABLE_NAME like @TableValue;
第一和第二个条件相互冲突。我认为你的意图只是:
Select 'Update ' + TABLE_NAME + ' set ' + COLUMN_NAME + ' = ''' + @NewValue + ''''
From INFORMATION_SCHEMA.COLUMNS
Where column_name = @ColumnValue and
TABLE_NAME like @TableValue;
您可能希望将@ColumnValue
重命名为类似于@ColumnName
的名称,这似乎更适合它的使用
编辑:
我认为你的意图是:
Select 'Update ' + TABLE_NAME + ' set ' + COLUMN_NAME + ' = ''' + @NewValue + ''' where ' + COLUMN_NAME + ' = ''' + @NewValue + ''''
From INFORMATION_SCHEMA.COLUMNS
Where column_name = @ColumnValue and
TABLE_NAME like @TableValue;
我想你混合了内部和外部,试试这个(我无法检查,可能是我放错了顶点):
我想你混合了内部和外部,试试这个(我无法检查,可能是我放错了顶点):
啊,对不起,按enter键太快了,我要试一试。。非常感谢!啊,对不起,按enter键太快了,我要试一试。。非常感谢!你不接受答案的原因是什么?你不接受答案的原因是什么?