【问题标题】:Is there a better way to find a specific value in dynamic query?有没有更好的方法在动态查询中找到特定值?
【发布时间】:2018-03-01 06:48:52
【问题描述】:

我正在尝试找出动态查询中是否存在值,目前我正在使用此解决方案:

DECLARE 
  @SQL NVARCHAR(MAX)
, @ISLN NUMERIC(9,0) = '967272'
SET @SQL = 
'SELECT * 
FROM ITEM 
LEFT OUTER JOIN SHIPMENT_DETAIL 
ON ITEM.ITEM = SHIPMENT_DETAIL.ITEM 
AND (SHIPMENT_DETAIL.COMPANY = ITEM.COMPANY OR ITEM.COMPANY IS NULL)  
WHERE (SHIPMENT_DETAIL.warehouse = N''SH'' ) 
ORDER BY ITEM.ITEM  ASC'
SELECT @SQL = STUFF (
    @SQL
    , 8
    , 1
    , 'INTERNAL_SHIPMENT_LINE_NUM'
)
DECLARE @TEMP TABLE (ISLN NUMERIC(9,0))
INSERT INTO @TEMP (ISLN)
EXEC SP_SQLEXEC @SQL
IF EXISTS (SELECT 1 FROM @TEMP WHERE ISLN = @ISLN)
SELECT 1
ELSE 
SELECT 0

动态 SQL 是由其他软件生成的,所以我无法更改输入数据。

有没有更好的方法在动态查询的特定列中查找特定值?

【问题讨论】:

  • sp_sqlexec() ???

标签: sql sql-server tsql dynamic


【解决方案1】:

试试这个,希望对你有帮助:

DECLARE 
  @SQL NVARCHAR(MAX)
, @ISLN NUMERIC(9,0) = '967272'
SET @SQL = 
'SELECT * 
FROM ITEM 
LEFT OUTER JOIN SHIPMENT_DETAIL 
ON ITEM.ITEM = SHIPMENT_DETAIL.ITEM 
AND (SHIPMENT_DETAIL.COMPANY = ITEM.COMPANY OR ITEM.COMPANY IS NULL)  
WHERE (SHIPMENT_DETAIL.warehouse = N''SH'' ) 
ORDER BY ITEM.ITEM  ASC'

SELECT @SQL = 'if exists (' + STUFF (
    @SQL
    , charindex('where', @sql) + 6
    , 0
    , 'INTERNAL_SHIPMENT_LINE_NUM = ' + cast(@isln as varchar(20)) + ' and '
) + ') select 1 else select 0;';
EXEC SP_SQLEXEC @SQL;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2019-12-09
    相关资源
    最近更新 更多