Ale*_*Gad 2 .net c# sql sql-server
有没有人试图动态地将标准sql字符串转换为参数化查询?换句话说,我需要改变这个:
SELECT * FROM customers WHERE name = 'Adams'
Run Code Online (Sandbox Code Playgroud)
对此:
SELECT * FROM customers WHERE name = @name
Run Code Online (Sandbox Code Playgroud)
我已经开始使用Microsoft.Data.Schema.ScriptDom.Sql和Microsoft.Data.Schema.ScriptDom程序集了,但是在我坚持下去之前,我想知道是否有一些东西已经出现了这个.
SQL Server完成了这项工作(以及ClearTrace之类的工具).
一种方法是使用正则表达式来规范化(不完全是您正在寻找的),例如基于Itzik Ben-Gan完成的工作并由Adam Machanic修改的SQL CLR方法:
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
public static SqlString sqlsig(SqlString querystring)
{
return (SqlString)Regex.Replace(
querystring.Value,
@"([\s,(=<>!](?![^\]]+[\]]))(?:(?:(?:(?:(?# expression coming
)(?:([N])?(')(?:[^']'')*('))(?# character
)(?:0x[\da-fA-F]*)(?# binary
)(?:[-+]?(?:(?:[\d]*\.[\d]*[\d]+)(?# precise number
)(?:[eE]?[\d]*)))(?# imprecise number
)(?:[~]?[-+]?(?:[\d]+))(?# integer
)(?:[nN][uU][lL][lL])(?# null
))(?:[\s]?[\+\-\*\/\%\&\\^][\s]?)?)+(?# operators
)))",
@"$1$2$3#$4");
}
Run Code Online (Sandbox Code Playgroud)
但输出的准确性可能无法捕获每个可能的参数短语.
我很好奇为什么你需要这个?
更新:正如Martin所说,还有用于SQL Server的RML实用程序
| 归档时间: |
|
| 查看次数: |
1774 次 |
| 最近记录: |