【问题标题】:sql can information_schema or sys.objects return table object from parametersql 可以 information_schema 或 sys.objects 从参数返回表对象
【发布时间】:2015-05-09 07:11:50
【问题描述】:

我有一个接受表名作为参数的过程。我的要求是查找对象是否存在于 information_schema 或 sys.object 中(哪个是有效的),然后返回表行。

这样可以返回完整的表对象吗?

declare @tableName nvarchar(250)
set @tableName = N'Person';
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @tableName)
BEGIN
    PRINT 'Table Exists';
    SELECT * from @tableName;
END

基本上我想将此结果存储在一个临时表中,然后从那里更新和删除记录。我要存储在临时表中的代码是:

DECLARE @sqlQuery nvarchar(4000);
SET @sqlQuery = 'SELECT * FROM ' + @tblName;

    PRINT @sqlQuery;
    insert INTO #TempTable 
       EXEC sp_executesql @sqlQuery;
    SELECT * FROM #TempTable;

我在最后一行说 #TempTable undefined. 时出现错误

【问题讨论】:

  • 你不能使用变量作为表名,你必须用 sp_executesql 或 exec 来做
  • 你需要使用像EXEC ('SELECT * FROM ' + quotename(@tableName));这样的动态SQL
  • 这样我无法将结果存储在临时表中。我更新了我的问题。请再看看。

标签: sql-server dynamic-sql information-schema


【解决方案1】:

试试这样的......

DECLARE @sqlQuery nvarchar(max);
declare @tableName sysname;

set @tableName = N'Person';

IF EXISTS (SELECT * FROM sys.tables WHERE name = @tableName)
BEGIN
    PRINT 'Table Exists';

    SET @sqlQuery = N'SELECT * INTO #temp FROM ' + QUOTENAME(@tableName) + N'; '
                  + N' SELECT * FROM #temp;'  

    EXEC sp_executesql @sqlQuery;
END

【讨论】:

  • 它返回结果,但问题是我仍然不能单独做SELECT * FROM #temp;。重要的是我可以在单独的表中保存值,因为当我去更新表时,我可以在这个临时表上添加连接。有没有其他方法可以将这些数据传递给临时表?
猜你喜欢
  • 2014-03-07
  • 1970-01-01
  • 2020-09-19
  • 2014-08-25
  • 2012-04-07
  • 2016-12-30
  • 1970-01-01
  • 2011-04-12
  • 2018-06-06
相关资源
最近更新 更多