[英]SQL Server + Dynamic Query 'Invalid Column Name'
我試圖執行以下動態查詢,但我收到一個錯誤:無效的列名稱'貓'
DECLARE @SQLDelQuery AS NVARCHAR(1200)
DECLARE @MemberNames varchar(50)
SET @MemberNames = 'cat'
SET @SQLDelQuery = 'SELECT [Email] FROM [aspnet_Membership] am
INNER JOIN [aspnet_Users] u
ON (am.UserId = u.UserId)
INNER JOIN [Member] m
ON (am.UserId = m.UserId)
WHERE u.UserName IN (' + @MemberNames + ')
EXECUTE(@SQLDelQuery)
如果我將其更改為正常查詢我很好:
SELECT [Email] FROM [aspnet_Membership] am
INNER JOIN [aspnet_Users] u
ON (am.UserId = u.UserId)
INNER JOIN [Member] m
ON (am.UserId = m.UserId)
WHERE u.UserName IN ('cat')
任何人都可以指出我的錯誤? 謝謝。
由於cat
是一個varchar,你需要在它周圍加上單引號,你需要在sql字符串中放置IN
子句的右括號。
新代碼將是:
DECLARE @SQLDelQuery AS NVARCHAR(1200)
DECLARE @MemberNames varchar(50)
SET @MemberNames = 'cat'
SET @SQLDelQuery = 'SELECT [Email] FROM [aspnet_Membership] am
INNER JOIN [aspnet_Users] u
ON (am.UserId = u.UserId)
INNER JOIN [Member] m
ON (am.UserId = m.UserId)
WHERE u.UserName IN (''' + @MemberNames + ''')'
EXECUTE(@SQLDelQuery)
查看打印了查詢字符串的SQL Fiddle Demo 。 這會生成一個像這樣的查詢字符串:
SELECT [Email]
FROM [aspnet_Membership] am
INNER JOIN [aspnet_Users] u
ON (am.UserId = u.UserId)
INNER JOIN [Member] m
ON (am.UserId = m.UserId)
WHERE u.UserName IN ('cat') -- cat surrounded in single quotes
您需要將其作為字符串傳遞給動態查詢
SET @MemberNames = '''cat'''
resulted query
差異是
WHERE u.UserName IN (cat) -- cat is taking as a column name here
WHERE u.UserName IN ('cat') -- cat is taking as a string here
你的字符串:
WHERE u.UserName IN (' + @MemberNames + ')
將評估為:
WHERE u.UserName IN (cat)
因為你所擁有的撇號只是封裝了字符串,並且字符串文字周圍沒有額外的撇號。
你需要:
WHERE u.UserName IN (''' + @MemberNames + ''')
或者,您可以保持查詢@MemberNames
,並在@MemberNames
變量中使用撇號分隔每個ID:
SET @MemberName = '''cat''' -- for a single user
SET @MemberName = '''cat'', ''dog''' -- for multiple users
您的動態查詢使用'
字符作為字符串分隔符,因此在構建字符串后,最后一行最終會像這樣讀取:
WHERE u.UserName IN (cat)
據此, cat
讀起來就像一個列名。
要修復它,您需要在定義中包含轉義的'
字符
`SET @MemberNames = '''cat'''`
或者在用於構建sql的字符串中:
`WHERE u.UserName IN (''' + @MemberNames + ''')'`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.