2009-09-18 19 views
0

SQL Server 2005中的存儲過程通過SQL Management Studio解析,編譯和運行成功。我最近將模式導入Visual Studio數據庫版2008並試圖「構建」項目。動態SQL字符串通配符%在Visual Studio中導致'無效列名'

兩個我產生從腳本對數據庫的整理,和「臨時」的設計實時數據庫是相同的(SQL_Latin1_General_CP1_CI_AS)

代碼目前看起來是這樣的:

DECLARE @SQL varchar(2000) 
IF @Username <> '' 
    SET @SQL = @SQL + ' AND Username LIKE ' + "'" + @Username + "%'" 

我收到這些錯誤:

Error 261 TSD4001: Invalid column name '''. (SQL error = 207) 
Error 262 TSD4001: Invalid column name '%''. (SQL error = 207) 

是否有使用動態SQL生成通配符,不會打破在Visual Studio生成過程的批准呢?

謝謝

回答

0

米奇小麥的好搭檔。

您需要通過連續使用兩個字符串來轉義SQL字符串中所需的每個單引號字符。 (第一個「關閉」的字符串,但以下的人告訴解析器這是字符串中的單引號)

具體來說,你想:

... ' AND Username LIKE ''' + @Username + '%''' 
4

嘗試用正確數量的單引號替換雙引號。

0

你在C#或VB這樣做。淨?

在這兩種情況下,替換每個單引號與2個單引號:

在客戶端代碼

,如果用戶名是客戶端變量, ,你把這個你需要

SQL = SQL + " AND Username LIKE ''" + username + "%''"; c# 
    SQL = SQL + " AND Username LIKE ''" + username + "%''" vb.Net 

,或者如果你正在使用參數(@UserName)

SQL = SQL + " AND Username LIKE ''@Username%''"; c# 
    SQL = SQL + " AND Username LIKE ''@Username%''" vb.Net 
+0

OP的代碼片段在T-SQL中。恐怕上述不會在那裏工作。 – mjv 2009-09-18 15:03:18

+0

是的,看到了這一點,但是引用了「斷開Visual Studio構建過程...」的說法。 – 2009-09-18 15:17:56

0

感謝閃電般的快速反應大家,真的有幫助米奇和mjv。現在要做一個sql注入以向同事證明它是流浪漢代碼!