执行SQL Server中列中包含的字符串
我需要在SQLServer中执行包含在字符串列中的查询;我该怎么做 我需要用执行SQL Server中列中包含的字符串,sql,sql-server,Sql,Sql Server,我需要在SQLServer中执行包含在字符串列中的查询;我该怎么做 我需要用sql\u text中包含的查询结果更新列: 生成以下内容的查询: id_coordenadaGPS, CONCAT('UPDATE CoordenadaGPS SET ogr_geometry = geometry::', ( CASE poly_type WHEN 'POLYGON' THEN 'STPolyFromText' WHEN 'LINESTRI
sql\u text
中包含的查询结果更新列:
生成以下内容的查询:
id_coordenadaGPS,
CONCAT('UPDATE CoordenadaGPS SET ogr_geometry = geometry::',
( CASE poly_type
WHEN 'POLYGON' THEN 'STPolyFromText'
WHEN 'LINESTRING' THEN 'STLineFromText'
ELSE 'STPointFromText'
END ),
'("', poly_string, '", 4326) WHERE id = ', id_coordenadaGPS) as sql_text
FROM (
SELECT CONCAT(poly_type, '(', point, ')') as poly_string, Id_CoordenadaGPS, poly_type FROM (
SELECT
(CASE
WHEN y.TOTAL_POINTS = 1 THEN 'POINT'
WHEN y.TOTAL_POINTS >= 3 THEN
CASE WHEN y.first_point = y.last_point THEN 'POLYGON' ELSE 'LINESTRING' END
ELSE 'LINE'
END) as poly_type,
point,
Id_CoordenadaGPS
FROM (
SELECT STRING_agg( CAST(CONCAT(Latitud,' ', Longitud) as nvarchar(max)), ',') as point, Id_CoordenadaGPS, count(1) AS TOTAL_POINTS,
(SELECT TOP 1 CONCAT(Latitud,' ', Longitud) FROM puntoGPS WHERE Id_CoordenadaGPS = x.Id_CoordenadaGPS AND Orden = 1) as first_point,
(SELECT TOP 1 CONCAT(Latitud,' ', Longitud) FROM puntoGPS WHERE Id_CoordenadaGPS = x.Id_CoordenadaGPS AND Orden = (SELECT TOP 1 Orden
FROM puntoGPS WHERE Id_CoordenadaGPS = x.Id_CoordenadaGPS ORDER BY Orden DESC )) as last_point
FROM (
SELECT TOP 1000000 latitud, longitud, id_CoordenadaGPS, Orden FROM puntoGPS
WHERE Id_CoordenadaGPS IN (
SELECT Id FROM CoordenadaGPS
)
ORDER BY orden
) x
GROUP BY Id_CoordenadaGPS
) y
) z
) FIN
具有顶点坐标的表,绘制顺序和对应图元的ID
带有ID、几何图形类型和每个实体名称的表
我需要使用PuntoGPS表中包含的顶点信息在此表中创建一个ogr_几何列
如果有人有一个“好方法”可以在一个查询中完成所有的工作,那就太棒了
多亏了所有的试试这个:
declare @Sql_text as varchar(1000)
Select @Sql_text = Sql_text from your table where idcordonadaGPS = 222
exec(@Sql_text)
您是如何尝试这样做的,具体来说,是什么出了问题?数据是如何在表中结束的?是否在插入前对其进行消毒?(看起来不像)。存储需要执行的查询不仅可怕,而且表明设计没有经过深思熟虑。恭喜!您的数据库刚刚成为SQL注入的牺牲品。Luis,我理解您的观点,但是,如果这是一个内部脚本或没有用户输入的东西(因此没有清理),我不会担心:-)