代码之家  ›  专栏  ›  技术社区  ›  shsteimer

当同时传入列名和表名时,如何运行查询?

  •  1
  • shsteimer  · 技术社区  · 17 年前

    例如,我想要一些东西 更好 比这:

    CREATE PROCEDURE spTest (@table NVARCHAR(30), @column NVARCHAR(30)) AS
    
      DECLARE @sql NVARCHAR(2000) 
      SELECT @sql = N'SELECT ' + @column + N' FROM ' + @table
      PRINT @sql
    
      EXEC sp_executesql @sql
    

    2 回复  |  直到 17 年前
        1
  •  2
  •   J. Polfer    17 年前

    动态版本的速度将慢3倍,仅仅是因为你的表名将来回交换,而解析器无法为此进行优化。

    您可能希望在例程中使用嵌套的switch语句,并使用它从预定义的表/列中选择select语句,特别是在模式不会经常更改的情况下。这应该跑得更快,但你会失去真正的活力。

        2
  •  1
  •   p.campbell    17 年前

    所以听起来问题是,你是否可以在不使用动态SQL的情况下在运行时构建和运行查询?

    • sp_ExecuteSQL Exec() 给定一个用户构建的字符串。无论是使用ADO库和Command对象传递SQL,还是直接在存储过程中。