2010-02-17 63 views
3

我想插入一個sql腳本到表中。我敢肯定,這不僅僅是將腳本包裝在引號中並將其引入插入語句中(引用腳本和更復雜的轉義似乎有問題,例如)如何準確地將sql腳本插入到SqlServer表中

因此,如何安全地將任意tsql存儲在一個SqlServer表?

如果需要,我可以使用sql或c#編碼腳本。

回答

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

使用存儲過程並將sql腳本作爲參數傳遞參數 - 你不會有報價和特殊符號的問題。

2

只要您使用帶有nvarchar(max)參數的存儲過程,將SQL文本存儲在數據庫中就不應該是一個問題,應該不需要轉義任何東西。

例如

CREATE PROCEDURE uspStoreSQL 
(
    @sql nvarchar(max) 
) 
AS 
INSERT INTO SomeTable (SQLText) 
Values (@sql)