存储过程中的列名无效

时间:2017-01-16 16:23:30

标签: c# wpf stored-procedures syntax-error sql-server-2014-express

这是我在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();
    }
}

我收到了错误:

  

我输入文本框/

的列名称/文本无效

我一直在寻找解决方案,我找不到任何东西,非常感谢你的帮助!

3 个答案:

答案 0 :(得分:0)

您需要确保Users值在引号内。因为它是sql并且只有单引号可用,所以你必须以那种奇怪的方式进行。

SET @query='SELECT * from '+QUOTENAME(@TableName)+' where Users='''+@User+''''

答案 1 :(得分:0)

尝试执行动态sql的存储过程语法错误。

@ParmDefinition

documentation about sp_executesql你可以看到一个参数应该在动态sql文本中使用,而不是试图提取值并附加值。之后,您应该为sp_executesql(@User = @User)定义参数,并将其值(if (( object instanceof THREE.Mesh ) { )设置为sp_executesql的第二个和第三个参数

答案 2 :(得分:-1)

查询未正确附上。

    SET @query="SELECT * from '+QUOTENAME(@TableName)+' where Users='+@User+'"