Tsql 如何生成等效的动态transact-sql块?

Tsql 如何生成等效的动态transact-sql块?,tsql,sql-server-2005,dynamic-sql,Tsql,Sql Server 2005,Dynamic Sql,我对T-SQL动态SP有一个问题。第一个块是我的失败尝试,第二个是我的目标(非动态块) 您只允许@sqlquery变量包含100个字符。把它弄大点 此外,在这些需要替换表名的动态查询中,我还需要采取两个额外的预防措施: 使用。例如:@sql='Select*FROM'+QuoteName(@table) 在information_schema中查找表名,以确保不会导致语法错误:从information_schema.Tables中选择表名,其中表名=@FACTUTABLE 如果您想真正喜欢,还可

我对T-SQL动态SP有一个问题。第一个块是我的失败尝试,第二个是我的目标(非动态块)


您只允许@sqlquery变量包含100个字符。把它弄大点

此外,在这些需要替换表名的动态查询中,我还需要采取两个额外的预防措施:

  • 使用。例如:
    @sql='Select*FROM'+QuoteName(@table)
  • 在information_schema中查找表名,以确保不会导致语法错误:
    从information_schema.Tables中选择表名,其中表名=@FACTUTABLE

  • 如果您想真正喜欢,还可以检查表是否在正确的架构中,甚至检查information_schema.columns以确保所选表具有正确的列名,但通常只有前两项检查是最重要的。

    什么是“失败尝试”呢?您是否收到错误消息、删除错误行等。?在这里提出问题时,请具体说明。修复“它不起作用”比解决特定问题要困难得多。好眼力Joel,+1。尽管我建议使用
    QUOTENAME()
    比显式添加方括号安全得多。
    CREATE PROCEDURE UDP1_TRY_EQQQ
    (@FACTUTABLE nvarchar(100))
    AS 
    declare @sqlquery as nvarchar(100)
    BEGIN
    SET @sqlquery = 'DELETE FROM ' + @FACTUTABLE + ' WHERE ANEXO IN 
        (SELECT ANEXO FROM ' + @FACTUTABLE + ' A LEFT JOIN ALTAS_MOVILES B 
        ON A.ANEXO=B.TCNFOL WHERE B.TCNFOL IS NULL)'
    EXEC sp_ExecuteSql @sqlquery
    END
    
    
    DELETE FROM FACTURACION_201210
    WHERE ANEXO IN 
    (
    SELECT ANEXO
    FROM FACTURACION_201210 A
    LEFT JOIN ALTAS_MOVILES B
    ON A.ANEXO=B.TCNFOL
    WHERE B.TCNFOL IS NULL
    )