SQL如何更新表没有按名称引用它?

时间:2013-12-17 17:51:18

标签: sql

我需要创建接受@TableName@ColumnName作为参数的过程,并根据提供的表/列名更新表

create My_Procedure (@TableName varchar(50), @ColumnName varchar(50))
as
update @TableName
set @ColumnName = '2013-01-01'
go

但是程序中的update语句不起作用。 请帮我找到一种重写语句的方法,这样它就可以在不使用动态SQL的情况下工作。也许以某种方式使用表和列的object_id

2 个答案:

答案 0 :(得分:0)

假设您使用SQL Server,您必须使用动态SQL来执行此类操作:

create My_Procedure (@TableName varchar(50), @ColumnName varchar(50))
as
begin
  declare @sql nvarchar(max)
  set @sql = 'update '+@TableName +' set '+@ColumnName+' = ''2013-01-01'''
  exec @sql
end

但是,请注意,这基本上可以对数据库执行任何操作,因此虽然动态sql存在合法用法,但这种通用方法可能不是最佳选择。

答案 1 :(得分:0)

看起来你需要查看动态sql,检查这个SO相关的问题。 Column-name and/or table-name as parameters