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

SQL Server在SELECT语句中执行原始SQL查询

  •  0
  • Tony  · 技术社区  · 8 年前

    问题是,可以在SELECT语句中执行动态SQL查询吗?

    类似于

    SELECT Col1, 
           Col2,
           'SELECT TOP 1 Col from ' + Col3,
    FROM Table1
    
    3 回复  |  直到 8 年前
        1
  •  0
  •   sniperd Ali Ahmed    8 年前

    我不确定这是不是 确切地 TOP 1 在示例中):

        IF OBJECT_ID('atest') IS NOT NULL
        DROP TABLE atest
    
    CREATE TABLE [dbo].[atest](
        [id] [int] NULL,
        [value] [varchar](50) NULL,
        [X] [varchar](50) NULL
    ) ON [PRIMARY]
    
    INSERT INTO atest (id, value, X) 
    VALUES  (1, 'ONE', 'EXTRA STUFF'),
            (2, 'TWO', 'OTHER'),
            (3, 'THREE', 'NOT THIS')
    
    DECLARE @X VARCHAR(100) = (SELECT TOP 1 X FROM atest)
    
    SELECT [id], [value] + '-->' + @X FROM atest
    

    1   ONE-->EXTRA STUFF
    2   TWO-->EXTRA STUFF
    3   THREE-->EXTRA STUFF
    

    您也可以制作临时表,或进行自连接。我认为这里有一些解决方案可以满足你的需求。祝你好运!:)

        2
  •  0
  •   asantaballa    8 年前

    不直接,但可以考虑将表1中的值选择到临时表中,然后使用动态更新语句添加col3指定的值表。不优雅,也没有在DB上试用过,但类似的东西可能会解决这个问题

    SELECT Col1, 
        Col2,
        Col3
        TopOfCol3Table = ''
    INTO #TempTable1
    FROM Table1
    
    DECLARE @Sql VARCHAR(1024) =  '
    UPDATE #TempTable1
    SET TopOfCol3Table = (SELECT TOP 1 Col FROM ' + Col3 ')'
    
    EXECUTE sp_executesql @Sql
    
        3
  •  -1
  •   mororo    8 年前

    您可以通过调用存储过程来执行TSQL命令 它将TSQL命令文本作为参数。

    以下是一些相关文档: sp_executesql (Transact-SQL)