如何解决连接两个表将ON条件存储为字符串的TSQL方法
我基本上是想联接两个表,其中联接条件存储为字符串。
-
我在TableA中存储的数据包括字段
TREATY_NO
和CO_CODE
。 -
我也有下面所示的TableB。我试图返回
LookupCode
字段为true的IncomingData
。
+---------------------------------------------------------------------------------------+------------------------------------------+
| IncomingData | LookupCode |
+---------------------------------------------------------------------------------------+------------------------------------------+
| CHARINDEX('99FW',TREATY_NO,3)>0 AND (CO_CODE='PAZ' OR CO_CODE='PNJ' OR CO_CODE='PRU') | '5-0089-2013-0500-01-A-2013-Y-USD-AL-01' |
| CHARINDEX('99FV',3)>0 AND (CO_CODE='PAZ' OR CO_CODE='PNJ' OR CO_CODE='PRU') | '5-0089-2013-0500-01-A-2013-Y-USD-AL-01' |
| CHARINDEX('99FK',3)>0 AND (CO_CODE='PAZ' OR CO_CODE='PNJ' OR CO_CODE='PRU') | '5-0089-2013-0500-01-A-2013-Y-USD-AL-01' |
| CHARINDEX('99FL',3)>0 AND (CO_CODE='PAZ' OR CO_CODE='PNJ' OR CO_CODE='PRU') | '5-0089-2013-0500-01-A-2013-Y-USD-AL-01' |
+---------------------------------------------------------------------------------------+------------------------------------------+
例如,如果TableA中的行包含TREATY_NO = 'ABC99FWTZ'
和CO_CODE = 'PAZ'
,则LookupCode
应该= '5-0089-2013-0500-01-A-2013-Y-USD-AL-01'
+-----------+---------+----------------------------------------+
| TREATY_NO | CO_CODE | LookupCode |
+-----------+---------+----------------------------------------+
| ABC99FWTZ | PAZ | 5-0089-2013-0500-01-A-2013-Y-USD-AL-01 |
+-----------+---------+----------------------------------------+
我确定必须有一种方法可以执行此操作,但是我不知道要搜索什么。我已经研究过用于逐行执行此操作的游标,但是设置结果似乎是一个更好的解决方案。
我也一直试图遵循这个问题的第一个答案。但是问题足够不同了。 SQL Server query condition as a text stored in a table column
即使是我要解决的问题的关键字也会很有帮助。
谢谢!
解决方法
我建议您更改问题的设计。我想不出任何有效的方法。但是,如果这是一项一次性任务,则可以将游标与动态Sql结合使用以使其工作。例如,
--we declare the necessary variables that we will use
DECLARE @filterText as VARCHAR(512)
DECLARE @sqlText as VARCHAR(1024)
DECLARE @TREATY_NO as VARCHAR(24)
SET @TREATY_NO = 'ABC99FWTZ'
DECLARE @CO_CODE as VARCHAR(24)
SET @CO_CODE = 'PAZ'
DECLARE @tempStr AS VARCHAR(512)
--we init a cursor that will get the filter from the tableB which then we create a dynamic SQL
DECLARE db_cursor CURSOR FOR
SELECT IncomingData
FROM TableB
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @filterText
WHILE @@FETCH_STATUS = 0
BEGIN
--we replace the variables from the text as parameters
@tempStr = REPLACE(@filterText,'TREATY_NO','@TREATY_NO')
@tempStr = REPLACE(@filterText,'CO_CODE','@CO_CODE')
--we create the SQL query as a string where the WHERE check first the row to be the one from the cursor and then the actual filter if it is true or not
@sqlText = 'SELECT @TREATY_NO,@CO_CODE,LookupCode FROM TableB WHERE @filterText = IncomeData AND ' + @tempStr
--we execute the select
EXEC (@sqlText)
FETCH NEXT FROM db_cursor INTO @filterText
END
CLOSE db_cursor
DEALLOCATE db_cursor
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。