【发布时间】:2013-06-05 19:57:44
【问题描述】:
我将一些查询存储在表列中,以便稍后通过一些参数执行它们。 但是由于特殊字符,将查询格式化为更新语句真的很烦人。
例如:
SELECT * FROM MOUNTAINS WHERE MON_NAME='PALMA' AND MON_DESC LIKE '%TRANVULCANIA%'
那么我只需要用于 udpate 查询的字符串:
UPDATE QUERIES
SET QUE_SEL='SELECT * FROM MOUNTAINS WHERE MON_NAME='''+'PALMA'+''' AND MON_DESC LIKE '''+'%TRANVULCANIA%'+''' '
WHERE QUE_ID=1
如您所见,第一个 ' 必须替换为 '''+' 但隔壁 ' 必须替换为 '+'''
这是我正在处理的查询:
DECLARE @QUERY VARCHAR(MAX)
SELECT @QUERY='SELECT * FROM QUERIES WHERE QUE_NOMBRE='''+'PRUEBA 1'+''' '
SELECT
t.r.value('.', 'varchar(255)') AS token
, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS id
FROM (
SELECT myxml = CAST('<t>' + REPLACE(@QUERY, '''', '</t><t>''</t><t>') + '</t>' AS XML)
) p
CROSS APPLY myxml.nodes('/t') t(r)
这是结果:
token id
-------------------------------------------------- --------------------
SELECT * FROM QUERIES WHERE QUE_NOMBRE= 1
' 2
PRUEBA 1 3
' 4
5
现在我想要一列告诉我何时打开和何时关闭,然后我可以设置最终替换。
【问题讨论】:
-
你是否考虑过命名参数,如
SELECT * FROM Table WHERE Column = @Value? -
只是一个例子..我当然使用@values,但我在查询中使用了一些xml,所以我需要使用'
标签: sql sql-server sql-server-2008 tsql formatting