我需要创建接受@TableName
和@ColumnName
作为参数的过程,并根据提供的表/列名更新表
create My_Procedure (@TableName varchar(50), @ColumnName varchar(50))
as
update @TableName
set @ColumnName = '2013-01-01'
go
但是程序中的update语句不起作用。
请帮我找到一种重写语句的方法,这样它就可以在不使用动态SQL的情况下工作。也许以某种方式使用表和列的object_id
?
答案 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