如何准确地将sql脚本插入到Sql Server表中

时间:2010-02-17 17:23:50

标签: c# sql-server tsql encoding

我想将sql脚本插入表中。我很确定这比将脚本包装在引号中并将其放入insert语句(带引号的脚本和更复杂的转义似乎有问题)更复杂。

那么,如何在SqlServer表中安全地存储任意tsql?

如果需要,我可以使用sql或c#对脚本进行编码。

3 个答案:

答案 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脚本作为参数传递 - 您不会遇到引号和特殊符号的问题。