0

這是SQL Server 2014我的存儲過程:無效的列名

CREATE PROCEDURE [dbo].[spSelectUserFromProfileUsers] 
    @TableName NVARCHAR(20), 
    @User NVARCHAR(20) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @query NVARCHAR(MAX); 
    SET @query = 'SELECT * FROM ' + QUOTENAME(@TableName) + ' WHERE Users =' + @User 

    EXECUTE sp_executesql @query 
END 

,這裏是我的Visual Studio代碼:

if (TableFunctions.doesTableExist(ComboBoxSelectedProfile.SelectedItem + "Users", dbConnectionString)) 
{ 
    // DynamicSQL 
    using (SqlCommand command = new SqlCommand("spSelectUserFromProfileUsers", connection)) 
    { 
     command.CommandType = CommandType.StoredProcedure; 

     command.Parameters.AddWithValue("@TableName", ComboBoxSelectedProfile.SelectedItem + "Users"); 
     command.Parameters.AddWithValue("@User", TextBoxUserName.Text); 

     command.ExecuteNonQuery(); 
    } 
} 

,我得到的錯誤:

Invalid column name /Text that I entered the textbox/

我一直在尋找解決方案很久,我找不到任何東西,我會非常感謝您的幫助!

+0

串聯的結果應該是這樣的:'SELECT * from [YourTable] WHERE Users = Some_User_Name' ....看到問題?,'Some_User_Name'應該是''Some_User_Name'' – Lamak

+0

但如果我添加'@User'它不會將@ User作爲參數 – WeinForce

+0

並且此代碼仍然打開ti sql因爲你只是在sproc中使用連接。 –

回答

0

您需要確保Users值在引號內。因爲它是sql,並且只有單引號可用,所以您必須以奇怪的方式進行操作。

SET @query='SELECT * from '+QUOTENAME(@TableName)+' where Users='''[email protected]+'''' 
+0

它確實有效,但我很難理解爲什麼要使用許多引號。 – WeinForce

+0

''''因爲設置'之間'是不可能的,tjere可以選擇添加一個,並且sql解釋它應該是。 Simillar情況在這裏:'''。 – MadOX

-1

查詢未正確包含。

SET @query="SELECT * from '+QUOTENAME(@TableName)+' where Users='[email protected]+'" 
+0

將在'c#'中工作,但在'sql'中沒有,因爲那裏沒有雙引號。 – MadOX

+0

對不起,我應該有單引號。雖然問題是一樣的。 –

0

您嘗試執行動態sql的存儲過程的語法錯誤。

DECLARE @ParmDefinition NVARCHAR(2000); 

SET @query='SELECT * from '+QUOTENAME(@TableName)+' where [email protected]'; 
SET @ParmDefinition = N'@User NVARCHAR(20)'; 
EXECUTE sp_executesql @query, @ParmDefinition, @User = @User; 

documentation about sp_executesql,你可以看到一個參數應作爲裏面的動態SQL文本不是想提取物價值和附加價值。之後,您應該爲sp_executesql(@ParmDefinition)定義參數並將其值(@User = @User)設置爲sp_executesql的第二個和第三個參數