簡體   English   中英

在通過C#調用的動態查詢中轉義'@'符號

[英]Escaping the '@' Symbol in a dynamic query called through C#

我現在有一個簡單的控制台應用程序,它調用帶有一些參數的存儲過程並創建一個動態查詢並執行它。 但是,在動態查詢中,我需要傳遞一個包含“@”符號的值。 例如,在@Query參數中,我需要傳遞一個包含'@'符號的值。 這是動態的,因此未來可能不包含此值:

SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "STORED PROCEDURE";

cmd.Parameters.Add(new SqlParameter() { ParameterName = "@Query", Value = "@ID, A, B, C", SqlDbType = SqlDbType.VarChar });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@Database", Value = "XXXX", SqlDbType = SqlDbType.VarChar });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@Server", Value = "YYYY", SqlDbType = SqlDbType.VarChar });
ocmd.Parameters.Add(new SqlParameter() { ParameterName = "@TableName", Value = "TESTTABLE", SqlDbType = SqlDbType.VarChar });
....
....
....
cmd.ExecuteScalar();

然后在Sql Server端,我將這些參數拼湊在一起,使它看起來像這樣:

SET @SQLQuery  = 'INSERT INTO ' + convert(varchar(500),@TableName)  + ' EXEC SOME_OTHER_STORED_PROC ' 
                    + convert(varchar(500),@Query) + ', ' 
                    + convert(varchar(500),@Database) + ', ' 
                    + convert(varchar(500),@Server) 
    EXECUTE sp_executesql @SQLQuery

每次我運行這個我得到以下錯誤必須聲明標量變量“@ID”。

任何幫助表示贊賞,謝謝!

我不認為問題是@字符。 由於您已定義查詢,因此@ID被視為參數,該參數未在任何位置定義。 如果表達

@ ID,A,B,C

表示過程EXEC SOME_OTHER_STORED_PROC的參數值,然后聲明參數如:

cmd.Parameters.Add(new SqlParameter() { ParameterName = "@Query", Value = "'@ID, A, B, C'", SqlDbType = SqlDbType.VarChar });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM