Tsql 如何生成等效的动态transact-sql块?
我对T-SQL动态SP有一个问题。第一个块是我的失败尝试,第二个是我的目标(非动态块)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 如果您想真正喜欢,还可
您只允许@sqlquery变量包含100个字符。把它弄大点 此外,在这些需要替换表名的动态查询中,我还需要采取两个额外的预防措施:
@sql='Select*FROM'+QuoteName(@table)代码>
从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
)