存储过程中的列名无效
Invalid column name on stored procedure
这是我在 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/
我一直在寻找解决方案,但我找不到任何东西,非常感谢你的帮助!
查询未正确包含。
SET @query="SELECT * from '+QUOTENAME(@TableName)+' where Users='+@User+'"
您需要确保您的 Users
值在引号内。因为它是 sql
并且只有单引号可用,所以您必须以这种奇怪的方式进行。
SET @query='SELECT * from '+QUOTENAME(@TableName)+' where Users='''+@User+''''
您尝试执行动态 sql 的存储过程语法错误。
DECLARE @ParmDefinition NVARCHAR(2000);
SET @query='SELECT * from '+QUOTENAME(@TableName)+' where Users=@User';
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
这是我在 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/
我一直在寻找解决方案,但我找不到任何东西,非常感谢你的帮助!
查询未正确包含。
SET @query="SELECT * from '+QUOTENAME(@TableName)+' where Users='+@User+'"
您需要确保您的 Users
值在引号内。因为它是 sql
并且只有单引号可用,所以您必须以这种奇怪的方式进行。
SET @query='SELECT * from '+QUOTENAME(@TableName)+' where Users='''+@User+''''
您尝试执行动态 sql 的存储过程语法错误。
DECLARE @ParmDefinition NVARCHAR(2000);
SET @query='SELECT * from '+QUOTENAME(@TableName)+' where Users=@User';
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