我正在尝试建立动态SQL查询。变量@NSQL包含带有关键字from itertools import islice, chain
def window(seq, n=2):
"Returns a sliding window (of width n) over data from the iterable"
" s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... "
it = iter(seq)
result = tuple(islice(it, n))
if len(result) == n:
yield result
for elem in it:
result = result[1:] + (elem,)
yield result
l = [1, 2, 2, -5, -4, 3, 1, 1, 2, 0]
s = {1,3,2}
def minimum_subset(l, s):
for w in chain.from_iterable(window(l, i) for i in range(len(s), len(l)+1)):
if s == set(w):
return w
return []
print(minimum_subset(l, s))
作为最后连接条件的SQL查询。
(3, 1, 1, 2)
这项工作还可以。
现在,我正尝试将其转换为动态SQL LIKE查询,如下所示:
<<INNERJOINKEYWORD>>
当我执行 SET @NSQL = 'SELECT * FROM CLIENT
<<INNERJOINKEYWORD>>'
SET @NSQL = REPLACE(@NSQL,'<<INNERJOINKEYWORD>>',' INNER JOIN #TempTable ON Client.Name = #TempTable.ClientName')
时,文本'#TempTable.ClientName'是查询的一部分,如何使其动态化?
答案 0 :(得分:5)
SET @NSQL = REPLACE(@NSQL,'<<INNERJOINKEYWORD>>',' INNER JOIN #TempTable ON Client.Name LIKE ''%'' + #TempTable.ClientName + ''%''')
但是,请注意,您可能会通过这种方法引入SQL注入漏洞。由于它涉及客户的名称,因此机会很小,但是尽管如此,确保客户名称中不能包含诸如';DELETE FROM CLIENT;--
之类的恶意值还是很好的。