我想将sql脚本插入表中。我很确定这比将脚本包装在引号中并将其放入insert语句(带引号的脚本和更复杂的转义似乎有问题)更复杂。
那么,如何在SqlServer表中安全地存储任意tsql?
如果需要,我可以使用sql或c#对脚本进行编码。
答案 0 :(得分:9)
使用参数化查询:
C#
var cmd = new SqlCommand(...);
cmd.CommandText = "INSERT INTO [Bla] ([SQL Column]) VALUES (@MyValue)";
cmd.Parameters.AddWithValue("MyValue", yourValueHere);
这将处理所有引用等等。
如果要使用存储过程,最终会以类似的方式执行它:
var cmd = new SqlCommand(...);
cmd.CommandText = "StoreSQL";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("MyValue", yourValueHere);
答案 1 :(得分:2)
只要您使用带有nvarchar(max)参数的存储过程,将SQL文本存储在数据库中就不应该成为问题,应该不需要转义任何内容。
e.g。
CREATE PROCEDURE uspStoreSQL
(
@sql nvarchar(max)
)
AS
INSERT INTO SomeTable (SQLText)
Values (@sql)
答案 2 :(得分:1)
使用存储过程并将sql脚本作为参数传递 - 您不会遇到引号和特殊符号的问题。