如何在存储过程中动态指定表

时间:2011-08-01 20:31:55

标签: sql stored-procedures sql-server-2008-express

感谢您的反馈,但我希望得到UPDATE命令的帮助,而不是SELECT。 任何人都可以帮助UPDATE命令的语法吗?

我将表名传递给存储过程但SQL似乎无法识别它。

DECLARE @userTable AS VARCHAR(200);
SET @userTable = @currTable


UPDATE @userTable
SET     [lang_String] = @lang_String, [date_Changed] = @submitDate1
WHERE   (ID = @ID)

@currTable被传递到存储过程。所有表名都是按代码设计构建的。

2 个答案:

答案 0 :(得分:5)

你不能,你需要构建整个SQL字符串,然后执行它,例如:

DECLARE @sql nvarchar(4000)

SELECT @sql = ' SELECT col1, col2, col3 ' +
              ' FROM dbo.' + quotename(@tblname) +
              ' WHERE keycol = @key'

EXEC sp_executesql @sql, N'@key varchar(10)', @key

答案 1 :(得分:0)

让这个很容易上班......

  @myTable varchar(150)

/* Comments:
*/ 

AS  
SET NOCOUNT ON;   

DECLARE @sql varchar(max);   

SET @sql = 'SELECT [ID], [StringID], [GUID] FROM ' + @myTable + ' ORDER BY [GUID]';

print (@sql) 

EXECUTE(@sql);

SET @langTable = Null;

仅供参考,myTable可用的值存储在另一个表中,用户无法进行编辑。表名是基于唯一值组合在代码中动态构建的。