Ошибка недопустимое имя столбца sql

I suspect that you have two tables with the same name. One is owned by the schema ‘dbo’ (dbo.PerfDiag), and the other is owned by the default schema of the account used to connect to SQL Server (something like userid.PerfDiag).

When you have an unqualified reference to a schema object (such as a table) — one not qualified by schema name — the object reference must be resolved. Name resolution occurs by searching in the following sequence for an object of the appropriate type (table) with the specified name. The name resolves to the first match:

  • Under the default schema of the user.
  • Under the schema ‘dbo’.

The unqualified reference is bound to the first match in the above sequence.

As a general recommended practice, one should always qualify references to schema objects, for performance reasons:

  • An unqualified reference may invalidate a cached execution plan for the stored procedure or query, since the schema to which the reference was bound may change depending on the credentials executing the stored procedure or query. This results in recompilation of the query/stored procedure, a performance hit. Recompilations cause compile locks to be taken out, blocking others from accessing the needed resource(s).

  • Name resolution slows down query execution as two probes must be made to resolve to the likely version of the object (that owned by ‘dbo’). This is the usual case. The only time a single probe will resolve the name is if the current user owns an object of the specified name and type.

[Edited to further note]

The other possibilities are (in no particular order):

  • You aren’t connected to the database you think you are.
  • You aren’t connected to the SQL Server instance you think you are.

Double check your connect strings and ensure that they explicitly specify the SQL Server instance name and the database name.

I am trying to enter data into my database, but it is giving me the following error:

Invalid column name

Here’s my code

string connectionString = "Persist Security Info=False;User ID=sa;Password=123;Initial Catalog=AddressBook;Server=Bilal-PC";

using (SqlConnection connection = new SqlConnection(connectionString))
{
  SqlCommand cmd = new SqlCommand();

  cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES (" + txtName.Text + "," + txtPhone.Text + "," + txtAddress.Text + ");";
  cmd.CommandType = CommandType.Text;
  cmd.Connection = connection;

  connection.Open();
  cmd.ExecuteNonQuery();
}

tom redfern's user avatar

tom redfern

30.4k13 gold badges91 silver badges125 bronze badges

asked Dec 5, 2011 at 18:09

Snake's user avatar

4

You probably need quotes around those string fields, but, you should be using parameterized queries!

cmd.CommandText = "INSERT INTO Data ([Name],PhoneNo,Address) VALUES (@name, @phone, @address)";
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@name", txtName.Text);
cmd.Parameters.AddWithValue("@phone", txtPhone.Text);
cmd.Parameters.AddWithValue("@address", txtAddress.Text);
cmd.Connection = connection;

Incidentally, your original query could have been fixed like this (note the single quotes):

"VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";

but this would have made it vulnerable to SQL Injection attacks since a user could type in

'; drop table users; -- 

into one of your textboxes. Or, more mundanely, poor Daniel O’Reilly would break your query every time.

answered Dec 5, 2011 at 18:11

Adam Rackis's user avatar

Adam RackisAdam Rackis

82.4k55 gold badges269 silver badges393 bronze badges

7

Always try to use parametrized sql query to keep safe from malicious occurrence, so you could rearrange you code as below:

Also make sure that your table has column name matches to Name, PhoneNo ,Address.

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand cmd = new SqlCommand("INSERT INTO Data (Name, PhoneNo, Address) VALUES (@Name, @PhoneNo, @Address)");
    cmd.CommandType = CommandType.Text;
    cmd.Connection = connection;
    cmd.Parameters.AddWithValue("@Name", txtName.Text);
    cmd.Parameters.AddWithValue("@PhoneNo", txtPhone.Text);
    cmd.Parameters.AddWithValue("@Address", txtAddress.Text);
    connection.Open();
    cmd.ExecuteNonQuery();
}

answered Dec 5, 2011 at 18:55

Elias Hossain's user avatar

Elias HossainElias Hossain

4,4101 gold badge19 silver badges33 bronze badges

3

Change this line:

cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES (" + txtName.Text + "," + txtPhone.Text + "," + txtAddress.Text + ");";

to this:

cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";

Your insert command is expecting text, and you need single quotes (‘) between the actual value so SQL can understand it as text.

EDIT: For those of you who aren’t happy with this answer, I would like to point out that there is an issue with this code in regards to SQL Injection. When I answered this question I only considered the question in point which was the missing single-quote on his code and I pointed out how to fix it. A much better answer has been posted by Adam (and I voted for it), where he explains the issues with injection and shows a way to prevent. Now relax and be happy guys.

answered Dec 5, 2011 at 18:12

MilkyWayJoe's user avatar

MilkyWayJoeMilkyWayJoe

9,0822 gold badges38 silver badges53 bronze badges

4

You problem is that your string are unquoted. Which mean that they are interpreted by your database engine as a column name.

You need to create parameters in order to pass your value to the query.

 cmd.CommandText = "INSERT INTO Data (Name, PhoneNo, Address) VALUES (@Name, @PhoneNo, @Address);";
 cmd.Parameters.AddWithValue("@Name", txtName.Text);
 cmd.Parameters.AddWithValue("@PhoneNo", txtPhone.Text);
 cmd.Parameters.AddWithValue("@Address", txtAddress.Text);

answered Dec 5, 2011 at 18:15

Pierre-Alain Vigeant's user avatar

You should never write code that concatenates SQL and parameters as string — this opens up your code to SQL injection which is a really serious security problem.

Use bind params — for a nice howto see here…

answered Dec 5, 2011 at 18:16

Yahia's user avatar

YahiaYahia

69.4k9 gold badges114 silver badges144 bronze badges

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.SqlClient;
using System.Data;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            SqlConnection conn = new SqlConnection(@"Data Source=WKS09SQLEXPRESS;Initial Catalog = StudentManagementSystem;Integrated Security=True");
            SqlCommand insert = new SqlCommand("insert into dbo.StudentRegistration(ID, Name,Age,DateOfBirth,Email,Comment) values(@ID, @Name,@Age,@DateOfBirth,@mail,@comment)", conn);
            insert.Parameters.AddWithValue("@ID", textBox1.Text);
            insert.Parameters.AddWithValue("@Name", textBox2.Text);
            insert.Parameters.AddWithValue("@Age", textBox3.Text);
            insert.Parameters.AddWithValue("@DateOfBirth", textBox4.Text);
            insert.Parameters.AddWithValue("@mail", textBox5.Text);
            insert.Parameters.AddWithValue("@comment", textBox6.Text);

            if (textBox1.Text == string.Empty)
            {
                MessageBox.Show("ID Cannot be Null");
                return;
            }
            else if (textBox2.Text == string.Empty)
            {
                MessageBox.Show("Name Cannot be Null");
                return;
            }


            try
            {
                conn.Open();
                insert.ExecuteNonQuery();
                MessageBox.Show("Register done !");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error" + ex.Message);
                conn.Close();
            }
        }

        private void btnRetrive_Click(object sender, RoutedEventArgs e)
        {
            bool temp = false;
            SqlConnection con = new SqlConnection("server=WKS09\SQLEXPRESS;database=StudentManagementSystem;Trusted_Connection=True");
            con.Open();
            SqlCommand cmd = new SqlCommand("select * from dbo.StudentRegistration where ID = '" + textBox1.Text.Trim() + "'", con);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                textBox2.Text = dr.GetString(1);
                textBox3.Text = dr.GetInt32(2).ToString(); 
                textBox4.Text = dr.GetDateTime(3).ToString();
                textBox5.Text = dr.GetString(4);
                textBox6.Text = dr.GetString(5);
                temp = true;
            }
            if (temp == false)
                MessageBox.Show("not found");
            con.Close();
        }

        private void btnClear_Click(object sender, RoutedEventArgs e)
        {
            SqlConnection connection = new SqlConnection("Data Source=WKS09\SQLEXPRESS;Initial Catalog = StudentManagementSystem;Integrated Security=True");
            string sqlStatement = "DELETE FROM dbo.StudentRegistration WHERE ID = @ID";
            try
            {
                connection.Open();
                SqlCommand cmd = new SqlCommand(sqlStatement, connection);
                cmd.Parameters.AddWithValue("@ID", textBox1.Text);
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Done");
            }
            finally
            {
                Clear();
                connection.Close();
            }
        }

        public void Clear()
        {
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
        }
    }
}

answered Jul 5, 2016 at 12:04

pavithra madhuwanthi's user avatar

Code To insert Data in Access Db using c#

Code:-

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace access_db_csharp
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
   public SqlConnection con = new SqlConnection(@"Place Your connection string");
            
           private void Savebutton_Click(object sender, EventArgs e)
    {
         SqlCommand cmd = new SqlCommand("insert into  Data (Name,PhoneNo,Address) values(@parameter1,@parameter2,@parameter3)",con);
                cmd.Parameters.AddWithValue("@parameter1", (textBox1.Text));
                cmd.Parameters.AddWithValue("@parameter2", textBox2.Text);
                cmd.Parameters.AddWithValue("@parameter3", (textBox4.Text));
                cmd.ExecuteNonQuery();

                }

    private void Form1_Load(object sender, EventArgs e)
    {
        con.ConnectionString = connectionstring;
        con.Open();
    }
}
}

answered Apr 18, 2014 at 18:56

Heemanshu Bhalla's user avatar

Heemanshu BhallaHeemanshu Bhalla

3,5751 gold badge27 silver badges53 bronze badges

You have to use '"+texbox1.Text+"','"+texbox2.Text+"','"+texbox3.Text+"'

Instead of "+texbox1.Text+","+texbox2.Text+","+texbox3.Text+"

Notice the extra single quotes.

Dima Tisnek's user avatar

Dima Tisnek

11.1k4 gold badges67 silver badges120 bronze badges

answered Feb 22, 2017 at 7:46

user7603356's user avatar

Your issue seems to be the Name keyword. Rather use FullName or firstName and lastName, always try and remember to use CamelCase too.

answered Apr 11, 2016 at 13:17

Jonathan Yaniv Ben Avraham's user avatar

1

first create database name «School»
than create table «students» with following columns
1. id
2. name
3. address

now open visual studio and create connection:

namespace school
{
    public partial class Form1 : Form
    {
        SqlConnection scon;


        public Form1()
        {

            InitializeComponent();

            scon = new SqlConnection("Data Source = ABC-PC; trusted_connection = yes; Database = school; connection timeout = 30");
        }

//create command

SqlCommand scom = new SqlCommand("insert into students (id,name,address) values(@id,@name,@address)", scon);

//pass parameters

scom.Parameters.Add("id", SqlDbType.Int);
scom.Parameters["id"].Value = textBox1.Text;

           scom.Parameters.Add("name", SqlDbType.VarChar);
            scom.Parameters["name"].Value = this.textBox2.Text;

            scom.Parameters.Add("address", SqlDbType.VarChar);
            scom.Parameters["address"].Value = this.textBox6.Text;


            scon.Open();
            scom.ExecuteNonQuery();
            scon.Close();
            reset();

        }

also check solution here: http://solutions.musanitech.com/?p=6

answered Sep 9, 2015 at 1:08

Hani Mehdi's user avatar

Hani MehdiHani Mehdi

1874 silver badges9 bronze badges

con = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=C:UsersYna Maningding-DulaDocumentsVisual Studio 2010ProjectsLuxuryHotelLuxuryHotelClientsRecords.mdf;Integrated Security=True;User Instance=True");
        con.Open();
        cmd = new SqlCommand("INSERT INTO ClientData ([Last Name], [First Name], [Middle Name], Address, [Email Address], [Contact Number], Nationality, [Arrival Date], [Check-out Date], [Room Type], [Daily Rate], [No of Guests], [No of Rooms]) VALUES (@[Last Name], @[First Name], @[Middle Name], @Address, @[Email Address], @[Contact Number], @Nationality, @[Arrival Date], @[Check-out Date], @[Room Type], @[Daily Rate], @[No of Guests], @[No of Rooms]", con);
        cmd.Parameters.Add("@[Last Name]", txtLName.Text);
        cmd.Parameters.Add("@[First Name]", txtFName.Text);
        cmd.Parameters.Add("@[Middle Name]", txtMName.Text);
        cmd.Parameters.Add("@Address", txtAdd.Text);
        cmd.Parameters.Add("@[Email Address]", txtEmail.Text);
        cmd.Parameters.Add("@[Contact Number]", txtNumber.Text);
        cmd.Parameters.Add("@Nationality", txtNational.Text);
        cmd.Parameters.Add("@[Arrival Date]", txtArrive.Text);
        cmd.Parameters.Add("@[Check-out Date]", txtOut.Text);
        cmd.Parameters.Add("@[Room Type]", txtType.Text);
        cmd.Parameters.Add("@[Daily Rate]", txtRate.Text);
        cmd.Parameters.Add("@[No of Guests]", txtGuest.Text);
        cmd.Parameters.Add("@[No of Rooms]", txtRoom.Text);
        cmd.ExecuteNonQuery();

answered Sep 17, 2016 at 15:40

Yna's user avatar

0

I am trying to enter data into my database, but it is giving me the following error:

Invalid column name

Here’s my code

string connectionString = "Persist Security Info=False;User ID=sa;Password=123;Initial Catalog=AddressBook;Server=Bilal-PC";

using (SqlConnection connection = new SqlConnection(connectionString))
{
  SqlCommand cmd = new SqlCommand();

  cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES (" + txtName.Text + "," + txtPhone.Text + "," + txtAddress.Text + ");";
  cmd.CommandType = CommandType.Text;
  cmd.Connection = connection;

  connection.Open();
  cmd.ExecuteNonQuery();
}

tom redfern's user avatar

tom redfern

30k13 gold badges94 silver badges124 bronze badges

asked Dec 5, 2011 at 18:09

Snake's user avatar

4

You probably need quotes around those string fields, but, you should be using parameterized queries!

cmd.CommandText = "INSERT INTO Data ([Name],PhoneNo,Address) VALUES (@name, @phone, @address)";
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@name", txtName.Text);
cmd.Parameters.AddWithValue("@phone", txtPhone.Text);
cmd.Parameters.AddWithValue("@address", txtAddress.Text);
cmd.Connection = connection;

Incidentally, your original query could have been fixed like this (note the single quotes):

"VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";

but this would have made it vulnerable to SQL Injection attacks since a user could type in

'; drop table users; -- 

into one of your textboxes. Or, more mundanely, poor Daniel O’Reilly would break your query every time.

answered Dec 5, 2011 at 18:11

Adam Rackis's user avatar

Adam RackisAdam Rackis

81.8k55 gold badges266 silver badges392 bronze badges

7

Always try to use parametrized sql query to keep safe from malicious occurrence, so you could rearrange you code as below:

Also make sure that your table has column name matches to Name, PhoneNo ,Address.

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand cmd = new SqlCommand("INSERT INTO Data (Name, PhoneNo, Address) VALUES (@Name, @PhoneNo, @Address)");
    cmd.CommandType = CommandType.Text;
    cmd.Connection = connection;
    cmd.Parameters.AddWithValue("@Name", txtName.Text);
    cmd.Parameters.AddWithValue("@PhoneNo", txtPhone.Text);
    cmd.Parameters.AddWithValue("@Address", txtAddress.Text);
    connection.Open();
    cmd.ExecuteNonQuery();
}

answered Dec 5, 2011 at 18:55

Elias Hossain's user avatar

Elias HossainElias Hossain

4,3601 gold badge19 silver badges33 bronze badges

3

Change this line:

cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES (" + txtName.Text + "," + txtPhone.Text + "," + txtAddress.Text + ");";

to this:

cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";

Your insert command is expecting text, and you need single quotes (‘) between the actual value so SQL can understand it as text.

EDIT: For those of you who aren’t happy with this answer, I would like to point out that there is an issue with this code in regards to SQL Injection. When I answered this question I only considered the question in point which was the missing single-quote on his code and I pointed out how to fix it. A much better answer has been posted by Adam (and I voted for it), where he explains the issues with injection and shows a way to prevent. Now relax and be happy guys.

answered Dec 5, 2011 at 18:12

MilkyWayJoe's user avatar

MilkyWayJoeMilkyWayJoe

9,0822 gold badges38 silver badges53 bronze badges

4

You problem is that your string are unquoted. Which mean that they are interpreted by your database engine as a column name.

You need to create parameters in order to pass your value to the query.

 cmd.CommandText = "INSERT INTO Data (Name, PhoneNo, Address) VALUES (@Name, @PhoneNo, @Address);";
 cmd.Parameters.AddWithValue("@Name", txtName.Text);
 cmd.Parameters.AddWithValue("@PhoneNo", txtPhone.Text);
 cmd.Parameters.AddWithValue("@Address", txtAddress.Text);

answered Dec 5, 2011 at 18:15

Pierre-Alain Vigeant's user avatar

You should never write code that concatenates SQL and parameters as string — this opens up your code to SQL injection which is a really serious security problem.

Use bind params — for a nice howto see here…

answered Dec 5, 2011 at 18:16

Yahia's user avatar

YahiaYahia

69k9 gold badges113 silver badges143 bronze badges

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.SqlClient;
using System.Data;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            SqlConnection conn = new SqlConnection(@"Data Source=WKS09SQLEXPRESS;Initial Catalog = StudentManagementSystem;Integrated Security=True");
            SqlCommand insert = new SqlCommand("insert into dbo.StudentRegistration(ID, Name,Age,DateOfBirth,Email,Comment) values(@ID, @Name,@Age,@DateOfBirth,@mail,@comment)", conn);
            insert.Parameters.AddWithValue("@ID", textBox1.Text);
            insert.Parameters.AddWithValue("@Name", textBox2.Text);
            insert.Parameters.AddWithValue("@Age", textBox3.Text);
            insert.Parameters.AddWithValue("@DateOfBirth", textBox4.Text);
            insert.Parameters.AddWithValue("@mail", textBox5.Text);
            insert.Parameters.AddWithValue("@comment", textBox6.Text);

            if (textBox1.Text == string.Empty)
            {
                MessageBox.Show("ID Cannot be Null");
                return;
            }
            else if (textBox2.Text == string.Empty)
            {
                MessageBox.Show("Name Cannot be Null");
                return;
            }


            try
            {
                conn.Open();
                insert.ExecuteNonQuery();
                MessageBox.Show("Register done !");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error" + ex.Message);
                conn.Close();
            }
        }

        private void btnRetrive_Click(object sender, RoutedEventArgs e)
        {
            bool temp = false;
            SqlConnection con = new SqlConnection("server=WKS09SQLEXPRESS;database=StudentManagementSystem;Trusted_Connection=True");
            con.Open();
            SqlCommand cmd = new SqlCommand("select * from dbo.StudentRegistration where ID = '" + textBox1.Text.Trim() + "'", con);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                textBox2.Text = dr.GetString(1);
                textBox3.Text = dr.GetInt32(2).ToString(); 
                textBox4.Text = dr.GetDateTime(3).ToString();
                textBox5.Text = dr.GetString(4);
                textBox6.Text = dr.GetString(5);
                temp = true;
            }
            if (temp == false)
                MessageBox.Show("not found");
            con.Close();
        }

        private void btnClear_Click(object sender, RoutedEventArgs e)
        {
            SqlConnection connection = new SqlConnection("Data Source=WKS09SQLEXPRESS;Initial Catalog = StudentManagementSystem;Integrated Security=True");
            string sqlStatement = "DELETE FROM dbo.StudentRegistration WHERE ID = @ID";
            try
            {
                connection.Open();
                SqlCommand cmd = new SqlCommand(sqlStatement, connection);
                cmd.Parameters.AddWithValue("@ID", textBox1.Text);
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Done");
            }
            finally
            {
                Clear();
                connection.Close();
            }
        }

        public void Clear()
        {
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
        }
    }
}

answered Jul 5, 2016 at 12:04

pavithra madhuwanthi's user avatar

Code To insert Data in Access Db using c#

Code:-

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace access_db_csharp
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
   public SqlConnection con = new SqlConnection(@"Place Your connection string");
            
           private void Savebutton_Click(object sender, EventArgs e)
    {
         SqlCommand cmd = new SqlCommand("insert into  Data (Name,PhoneNo,Address) values(@parameter1,@parameter2,@parameter3)",con);
                cmd.Parameters.AddWithValue("@parameter1", (textBox1.Text));
                cmd.Parameters.AddWithValue("@parameter2", textBox2.Text);
                cmd.Parameters.AddWithValue("@parameter3", (textBox4.Text));
                cmd.ExecuteNonQuery();

                }

    private void Form1_Load(object sender, EventArgs e)
    {
        con.ConnectionString = connectionstring;
        con.Open();
    }
}
}

answered Apr 18, 2014 at 18:56

Heemanshu Bhalla's user avatar

Heemanshu BhallaHeemanshu Bhalla

3,5051 gold badge26 silver badges52 bronze badges

You have to use '"+texbox1.Text+"','"+texbox2.Text+"','"+texbox3.Text+"'

Instead of "+texbox1.Text+","+texbox2.Text+","+texbox3.Text+"

Notice the extra single quotes.

Dima Tisnek's user avatar

Dima Tisnek

11k4 gold badges63 silver badges120 bronze badges

answered Feb 22, 2017 at 7:46

user7603356's user avatar

Your issue seems to be the Name keyword. Rather use FullName or firstName and lastName, always try and remember to use CamelCase too.

answered Apr 11, 2016 at 13:17

Jonathan Yaniv Ben Avraham's user avatar

1

first create database name «School»
than create table «students» with following columns
1. id
2. name
3. address

now open visual studio and create connection:

namespace school
{
    public partial class Form1 : Form
    {
        SqlConnection scon;


        public Form1()
        {

            InitializeComponent();

            scon = new SqlConnection("Data Source = ABC-PC; trusted_connection = yes; Database = school; connection timeout = 30");
        }

//create command

SqlCommand scom = new SqlCommand("insert into students (id,name,address) values(@id,@name,@address)", scon);

//pass parameters

scom.Parameters.Add("id", SqlDbType.Int);
scom.Parameters["id"].Value = textBox1.Text;

           scom.Parameters.Add("name", SqlDbType.VarChar);
            scom.Parameters["name"].Value = this.textBox2.Text;

            scom.Parameters.Add("address", SqlDbType.VarChar);
            scom.Parameters["address"].Value = this.textBox6.Text;


            scon.Open();
            scom.ExecuteNonQuery();
            scon.Close();
            reset();

        }

also check solution here: http://solutions.musanitech.com/?p=6

answered Sep 9, 2015 at 1:08

Hani Mehdi's user avatar

Hani MehdiHani Mehdi

1874 silver badges9 bronze badges

con = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=C:UsersYna Maningding-DulaDocumentsVisual Studio 2010ProjectsLuxuryHotelLuxuryHotelClientsRecords.mdf;Integrated Security=True;User Instance=True");
        con.Open();
        cmd = new SqlCommand("INSERT INTO ClientData ([Last Name], [First Name], [Middle Name], Address, [Email Address], [Contact Number], Nationality, [Arrival Date], [Check-out Date], [Room Type], [Daily Rate], [No of Guests], [No of Rooms]) VALUES (@[Last Name], @[First Name], @[Middle Name], @Address, @[Email Address], @[Contact Number], @Nationality, @[Arrival Date], @[Check-out Date], @[Room Type], @[Daily Rate], @[No of Guests], @[No of Rooms]", con);
        cmd.Parameters.Add("@[Last Name]", txtLName.Text);
        cmd.Parameters.Add("@[First Name]", txtFName.Text);
        cmd.Parameters.Add("@[Middle Name]", txtMName.Text);
        cmd.Parameters.Add("@Address", txtAdd.Text);
        cmd.Parameters.Add("@[Email Address]", txtEmail.Text);
        cmd.Parameters.Add("@[Contact Number]", txtNumber.Text);
        cmd.Parameters.Add("@Nationality", txtNational.Text);
        cmd.Parameters.Add("@[Arrival Date]", txtArrive.Text);
        cmd.Parameters.Add("@[Check-out Date]", txtOut.Text);
        cmd.Parameters.Add("@[Room Type]", txtType.Text);
        cmd.Parameters.Add("@[Daily Rate]", txtRate.Text);
        cmd.Parameters.Add("@[No of Guests]", txtGuest.Text);
        cmd.Parameters.Add("@[No of Rooms]", txtRoom.Text);
        cmd.ExecuteNonQuery();

answered Sep 17, 2016 at 15:40

Yna's user avatar

0

I suspect that you have two tables with the same name. One is owned by the schema ‘dbo’ (dbo.PerfDiag), and the other is owned by the default schema of the account used to connect to SQL Server (something like userid.PerfDiag).

When you have an unqualified reference to a schema object (such as a table) — one not qualified by schema name — the object reference must be resolved. Name resolution occurs by searching in the following sequence for an object of the appropriate type (table) with the specified name. The name resolves to the first match:

  • Under the default schema of the user.
  • Under the schema ‘dbo’.

The unqualified reference is bound to the first match in the above sequence.

As a general recommended practice, one should always qualify references to schema objects, for performance reasons:

  • An unqualified reference may invalidate a cached execution plan for the stored procedure or query, since the schema to which the reference was bound may change depending on the credentials executing the stored procedure or query. This results in recompilation of the query/stored procedure, a performance hit. Recompilations cause compile locks to be taken out, blocking others from accessing the needed resource(s).

  • Name resolution slows down query execution as two probes must be made to resolve to the likely version of the object (that owned by ‘dbo’). This is the usual case. The only time a single probe will resolve the name is if the current user owns an object of the specified name and type.

[Edited to further note]

The other possibilities are (in no particular order):

  • You aren’t connected to the database you think you are.
  • You aren’t connected to the SQL Server instance you think you are.

Double check your connect strings and ensure that they explicitly specify the SQL Server instance name and the database name.

I suspect that you have two tables with the same name. One is owned by the schema ‘dbo’ (dbo.PerfDiag), and the other is owned by the default schema of the account used to connect to SQL Server (something like userid.PerfDiag).

When you have an unqualified reference to a schema object (such as a table) — one not qualified by schema name — the object reference must be resolved. Name resolution occurs by searching in the following sequence for an object of the appropriate type (table) with the specified name. The name resolves to the first match:

  • Under the default schema of the user.
  • Under the schema ‘dbo’.

The unqualified reference is bound to the first match in the above sequence.

As a general recommended practice, one should always qualify references to schema objects, for performance reasons:

  • An unqualified reference may invalidate a cached execution plan for the stored procedure or query, since the schema to which the reference was bound may change depending on the credentials executing the stored procedure or query. This results in recompilation of the query/stored procedure, a performance hit. Recompilations cause compile locks to be taken out, blocking others from accessing the needed resource(s).

  • Name resolution slows down query execution as two probes must be made to resolve to the likely version of the object (that owned by ‘dbo’). This is the usual case. The only time a single probe will resolve the name is if the current user owns an object of the specified name and type.

[Edited to further note]

The other possibilities are (in no particular order):

  • You aren’t connected to the database you think you are.
  • You aren’t connected to the SQL Server instance you think you are.

Double check your connect strings and ensure that they explicitly specify the SQL Server instance name and the database name.



Я работаю над изменением существующей хранимой процедуры SQL Server. Я добавил два новых столбца в таблицу и также изменил хранимую процедуру, чтобы выбрать эти два столбца. Хотя столбцы доступны в таблице SQL Server продолжает давать эту ошибку:

недопустимое имя столбца ‘INCL_GSTAMOUNT’

enter image description here

может кто-нибудь пожалуйста, скажите мне, что тут не так?


1430  


9  

9 ответов:

всякий раз, когда это происходит со мной, я нажимаю Ctrl+ Shift+R обновления intellisense, закройте окно запроса (сохранить при необходимости), а затем запустите новый сеанс, который обычно работает довольно хорошо.

также может произойти, если положить строку в двойные кавычки вместо одинарных.

Intellisense не обновляется автоматически, и вы не должны полностью полагаться на это

эта ошибка также может возникать в инкапсулированных инструкциях SQL, например

объявить @tableName nvarchar (20) SET @tableName = ‘GROC’

объявить @updtStmt nvarchar (4000)

SET @updtStmt = ‘Update tbProductMaster_’ [email protected] + ‘ SET
department_str = ‘ + @tableName exec sp_executesql @updtStmt

только чтобы обнаружить, что отсутствуют цитаты для инкапсуляции параметра «@tableName » далее, как следующее:

SET @updtStmt = ‘Update tbProductMaster_’ [email protected] + ‘ SET
department_str = «‘ + @tableName+»»

спасибо

я получаю ту же ошибку при создании представления.

представьте себе запрос select, который выполняется без проблем:

select id
from products

попытка создать представление из того же запроса приведет к ошибке:

create view app.foobar as
select id
from products

Msg 207, Уровень 16, состояние 1, процедура foobar, строка 2
Недопустимое имя столбца «id».

для меня это оказалось проблемой области видимости; обратите внимание, что представление создается в другой схеме. Указание схема из products таблица решила проблему. То есть.. используя просто products.

с обновить таблицу или закрыть и открыть sql server эта работа

У меня была похожая проблема.

проблема заключалась в том, что в таблице был триггер, который записывал изменения в таблицу журнала аудита. В таблице журнала аудита отсутствовали столбцы.

следующая процедура помогла мне решить эту проблему, но я не знаю, почему.

  1. вырезать код, о котором идет речь, заданный строками в сообщении
  2. сохраните запрос (например, в файл)
  3. вставьте код туда, где он был раньше
  4. снова сохраните запрос

даже если это, кажется, тот же запрос, выполняющий его не бросил эту ошибку

Я просто попробовал.
Если вы выполните инструкцию для создания локальной таблицы, инструмент примет, что это имя столбца существует.
Просто отметьте оператор генерации таблицы в окне редактора и нажмите кнопку Выполнить.

YFKoenigsegg

1 / 1 / 0

Регистрация: 06.10.2018

Сообщений: 160

1

Недопустимое имя столбца

19.02.2020, 14:48. Показов 8949. Ответов 8

Метки нет (Все метки)


Добрый день. Использую Entity Framework при сохранении пользователя в БД:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
      private void picSignUp_Click(object sender, EventArgs e)
        {
            using (var db = new DB())
            {
                var user = new UserClient()
                {
                    Name = fldName.Text,
                    Surname = fldSurname.Text,
                    PassportNumber = fldPassportNumber.Text,
                    UserLogin = fldLoginUp.Text,
                    Password = fldPasswordUp.Text,
                    Email = fldEmail.Text,
                    RegistrationDate = DateTime.Now.ToString()
                };
                db.UserClients.Add(user);
                db.SaveChanges();
 
 
            }
        }

Но вот в строке

C#
1
db.SaveChanges();

выбрасывается исключение, которое гласит, что «Недопустимое имя столбца Id». Подскажите пожалуйста, как пофиксить.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

bite

3264 / 2852 / 659

Регистрация: 13.04.2015

Сообщений: 6,732

19.02.2020, 14:58

2

Цитата
Сообщение от YFKoenigsegg
Посмотреть сообщение

Подскажите пожалуйста, как пофиксить.

Понятно как — ввести допустимое имя столбца.
Может символы какие недопустимые, может длина превышена, вам лучше знать.

0

602 / 369 / 132

Регистрация: 06.03.2017

Сообщений: 1,364

19.02.2020, 15:01

3

Было бы неплохо глянуть на саму бд. А так только гадать. Ну и не видно, где передается парамет для Id

0

YFKoenigsegg

1 / 1 / 0

Регистрация: 06.10.2018

Сообщений: 160

19.02.2020, 16:00

 [ТС]

4

А параметр Id я не передаю, тк он используется в качестве автоинкремента при добавлении новой записи в БД.
Вот таблица:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
USE [ClientsDB]
GO
 
CREATE TABLE [dbo].[UserClients](
    [UserLogin] [VARCHAR](25) NOT NULL,
    [Password] [VARCHAR](25) NOT NULL,
    [PassportNumber] [VARCHAR](9) NOT NULL,
    [Name] [nvarchar](20) NOT NULL,
    [Surname] [nvarchar](25) NOT NULL,
    [Email] [VARCHAR](40) NOT NULL,
    [RegistrationDate] [VARCHAR](20) NOT NULL,
    UserId INT IDENTITY(1,1)
)
GO
 
ALTER TABLE [dbo].[UserClients] ADD  CONSTRAINT [DF_UserClients_RegistrationDate]  DEFAULT (getdate()) FOR [RegistrationDate]
GO
 
ALTER TABLE UserClients
ADD CONSTRAINT DF_UserClients_UserLogin_Unique UNIQUE (UserLogin)
GO
 
ALTER TABLE UserClients
ADD CONSTRAINT DF_UserClients_Email_Unique UNIQUE (Email)
GO
 
ALTER TABLE UserClients
ADD CONSTRAINT DF_UserClients_UserId PRIMARY KEY CLUSTERED (UserId)
GO

0

796 / 579 / 207

Регистрация: 21.02.2019

Сообщений: 2,095

19.02.2020, 16:35

5

YFKoenigsegg,
а в самом классе UserClient поле Id присутствует?

0

YFKoenigsegg

1 / 1 / 0

Регистрация: 06.10.2018

Сообщений: 160

19.02.2020, 18:54

 [ТС]

6

Да, в этом классе это поле есть(его там я поставил с той целью, чтобы потом получить Id из базы данных — а надо ли создавать прямо целое поля для этого или надо без него?), а если я убираю
это получается другая совсем ошибка которая также мне не известна:

C#
1
2
BankService.UserClient: : EntityType 'UserClient' has no key defined. Define the key for this EntityType.
UserClients: EntityType: EntitySet 'UserClients' is based on type 'UserClient' that has no keys defined.

Код класса UserClient:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 class UserClient
    {
        //public int Id { get; set; }
        public string UserLogin { get; set; }
        public string Password
        {
            set { }
        }
        public string PassportNumber { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Email{ get; set; }
        public string RegistrationDate { get; set; }
    }

Добавлено через 1 час 30 минут
Решил проблему.Добавил следующее:

C#
1
2
 [Key]
        public string UserLogin { get; set; }

и подключил:

C#
1
using System.ComponentModel.DataAnnotations;

и убрал вовсе полe Id

0

Эксперт .NET

11045 / 7601 / 1176

Регистрация: 21.01.2016

Сообщений: 28,582

20.02.2020, 06:53

7

Цитата
Сообщение от YFKoenigsegg
Посмотреть сообщение

Решил проблему.Добавил следующее:

Это дичь. Для ключа нужно использовать отдельное поле с INT или GUID. UserId INT IDENTITY(1,1) PRIMARY KEY — самое правильное решение во всех смыслах.

3

YFKoenigsegg

1 / 1 / 0

Регистрация: 06.10.2018

Сообщений: 160

20.02.2020, 19:33

 [ТС]

8

Всё, переделал.
Поле Id должно называться так же, как и имя столбца(то есть UserId):

C#
1
public int UserId { get; set; }

0

Эксперт .NET

11045 / 7601 / 1176

Регистрация: 21.01.2016

Сообщений: 28,582

21.02.2020, 01:54

9

Цитата
Сообщение от YFKoenigsegg
Посмотреть сообщение

Поле Id должно называться так же, как и имя столбца(то есть UserId):

Не обязательно. Этот момент настраивается.

0

Добрый день!
После перехода на MS SQL 2016 столкнулись со следующей ошибкой при работе пользователей через веб браузер и через тонкого клиента с подключением через http:

Платформа: 1С:Предприятие 8.3 (8.3.11.2867 )

Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Недопустимое имя столбца «PartNo».
HRESULT=80040E14, SQLSrvr: SQLSTATE=42S22, state=1, Severity=10, native=207, line=1

Ошибка спонтанная, возникает как на типовых конфигурациях, так и на самописных простеньких конфигурациях с отключенным режимом совместимости.
При работе в толстом клиенте ошибка не возникала ни когда.

Веб сервер Апач. Пробовались разные версии — 2.2, 2.4. Использовались как отдельные Линукс сервера, так и устанавливался апач на сервер 1с предприятия.

Сервер 1С и SQl установлены на одном сервере. Используется шаред мемори. Отключение шаред мемори не помогло.

Версия SQL:
Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) — 13.0.4466.4 (X64)

Уровень совместимости базы данных менялся от 100 до 130.

Первоначально проблема возникла на версии 1С 8.3.10.2667, обновление на 8.3.11.2867 — не помогло.

Стандартные «пляски» — выгрузка загрузка через DT, удаление базы из сервера 1с и создание заново, удаление и создание базы sql, очистка всевозможных кешей — ничего не помогло.

Подскажите, какие процедуры можно провести для поиска и решения проблемы?

Всякий раз, когда я отправляю свою форму, он дает мне код ошибки:

«Недопустимое имя столбца» для всех событийспециалиста, телефона, телефона2 и т.д. и @SPECIALIST, @CUST_PHONE, @CUST_PHONE2 и т.д.

Вот мой код ниже, возможно, я не правильно пишу инструкцию SQL или параметры? Те, у которых @infront, есть то, что в моей базе данных, а другие строчные — мои текстовые поля. Я относительно новичок в этом типе кодирования.

Изменить: Изменено мое выражение INSERT INTO на то, что было предложено. Ошибка все еще сохраняется, но сводится к минимуму до

«Недопустимое имя столбца eventpecialist, Недопустимое имя столбца телефона, Недопустимое имя столбца phone2 и т.д.»

private void execution(string eventspecialist, string phone, string phone2, string firstname, string lastname, string besttime, string companyname, string nonprofit, string requesteddate, string requestedtime, string attendance, string eventtype, string other, string leadsource, string notes, string catering, string bar, string damagedeposit, string dancefloor, string griddate, string gridnotes, string comments)
{
    SqlConnection conn = new SqlConnection(GetConnectionString());

    string sql = "INSERT INTO tblcontacts (@SPECIALIST, @CUST_PHONE1, @CUST_PHONE2, @CUST_FNAME, @CUST_LNAME, @BEST_TIME, @COMPANY_NAME, @NONPROFIT, @REQ_DATE, @REQ_TIME, @ATTENDANCE, @EVENT_TYPE, @OTHER_DESC, @LEAD_SOURCE, @NOTES, @CATERING, @BAR, @DAMAGE_DEPOSIT, @DANCE_FLOOR) VALUES (eventspecialist, phone, phone2, firstname, lastname, besttime, companyname, nonprofit, requesteddate, requestedtime, attendance, eventtype, other, leadsource, notes, catering, bar, damagedeposit, dancefloor)";
    string sql2 = "INSERT INTO tblnotes (@NOTEDATE, @NOTEBY, @COMMENTS) VALUES (griddate, gridnotes, comments)";

    try
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn);

        cmd.Parameters.Add("@SPECIALIST", SqlDbType.NVarChar, 50).Value = eventspecialist;
        cmd.Parameters.Add("@CUST_PHONE1", SqlDbType.NVarChar, 50).Value = phone;
        cmd.Parameters.Add("@CUST_PHONE2", SqlDbType.NVarChar, 50).Value = phone2;
        cmd.Parameters.Add("@CUST_FNAME", SqlDbType.NVarChar, 50).Value = firstname;
        cmd.Parameters.Add("@CUST_LNAME", SqlDbType.NVarChar, 50).Value = lastname;
        cmd.Parameters.Add("@BEST_TIME", SqlDbType.NVarChar, 50).Value = besttime;
        cmd.Parameters.Add("@COMPANY_NAME", SqlDbType.NVarChar, 225).Value = companyname;
        cmd.Parameters.Add("@NONPROFIT", SqlDbType.NVarChar, 10).Value = nonprofit;
        cmd.Parameters.Add("@REQ_DATE", SqlDbType.Date, 20).Value = requesteddate;
        cmd.Parameters.Add("@REQ_TIME", SqlDbType.Time, 20).Value = requestedtime;
        cmd.Parameters.Add("@ATTENDANCE", SqlDbType.Int, 50).Value = attendance;
        cmd.Parameters.Add("@EVENT_TYPE", SqlDbType.NVarChar, 50).Value = eventtype;
        cmd.Parameters.Add("@OTHER_DESC", SqlDbType.NVarChar, 225).Value = other;
        cmd.Parameters.Add("@LEAD_SOURCE", SqlDbType.NVarChar, 50).Value = leadsource;
        cmd.Parameters.Add("@NOTES", SqlDbType.NVarChar, 225).Value = notes;
        cmd.Parameters.Add("@CATERING", SqlDbType.NVarChar, 1).Value = catering;
        cmd.Parameters.Add("@BAR", SqlDbType.NVarChar, 1).Value = bar;
        cmd.Parameters.Add("@DAMAGE_DEPOSIT", SqlDbType.NVarChar, 19).Value = damagedeposit;
        cmd.Parameters.Add("@DANCE_FLOOR", SqlDbType.Money).Value = Decimal.Parse(dancefloor);


        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();
    }
    catch (System.Data.SqlClient.SqlException ex_msg)
    {
        string msg = "Error occured while inserting";
        msg += ex_msg.Message;
        throw new Exception(msg);
    }
    finally
    {

        conn.Close();
    }
    try
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql2, conn);

        cmd.Parameters.Add("@NOTEDATE", SqlDbType.Date, 50).Value = griddate;
        cmd.Parameters.Add("@NOTEBY", SqlDbType.NVarChar, 50).Value = gridnotes;
        cmd.Parameters.Add("@COMMENTS", SqlDbType.NVarChar, 50).Value = comments;

        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();
    }
    catch (System.Data.SqlClient.SqlException ex_msg)
    {
        string msg = "Error occured while inserting";
        msg += ex_msg.Message;
        throw new Exception(msg);
    }
    finally
    {

        conn.Close();
    }

}
protected void Page_Load(object sender, EventArgs e)
{
    griddate.Text = DateTime.Now.ToString("yyyy/MM/dd");
}
protected void submit_Click(object sender, EventArgs e)
{
    if (requesteddate.Text == "")
    {
        Finish.Text = "Please complete the form!";
    }
    else if (requestedtime.Text == "")
    {
        Finish.Text = "Please complete the form!";
    }
    else if (attendance.Text == "")
    {
        Finish.Text = "Please complete the form!";
    }
    else
    {
        execution(eventspecialist.Text, phone.Text, phone2.Text, firstname.Text, lastname.Text, besttime.SelectedItem.Text, companyname.Text, nonprofit.Text, requesteddate.Text, requestedtime.Text, attendance.Text, eventtype.SelectedItem.Text, other.Text, leadsource.SelectedItem.Text, notes.Text, catering.Text, bar.Text, damagedeposit.Text, dancefloor.SelectedItem.Text, griddate.Text, gridnotes.SelectedItem.Text, comments.Text);
        Finish.Visible = false;
        conform.Visible = true;
    }
}

Если я попытаюсь выполнить следующий код, я получу сообщение об ошибке

Сообщение 207, уровень 16, состояние 1, строка 3 Недопустимое имя столбца «Другой». Сообщение 207, уровень 16, состояние 1, строка 4 Недопустимое имя столбца «Другой».

хотя предикат для обоих IF утверждения всегда оцениваются как ложные.

CREATE TABLE #Foo (Bar INT)
GO
IF (1=0)
BEGIN
    SELECT Another FROM #Foo
END
GO
IF (1=0)
BEGIN
    ALTER TABLE #Foo ADD Another INT
    SELECT Another FROM #Foo 
END
GO
DROP TABLE #Foo

Это, вероятно, слишком упрощено для примера; на самом деле мне нужно выбрать значения из столбца, но только если столбец существует. Если его не существует, меня это не волнует. В проблеме, которая заставила меня задать этот вопрос, мой предикат был примерно таким: EXISTS (SELECT * FROM sys.columns WHERE object_id = @ID AND name = @Name). Есть ли способ добиться этого, не прибегая к моему заклятому врагу Dynamic SQL? Я понимаю, что мой SQL всегда должен быть правильно сформирован (т.е. соответствовать грамматике) — даже в блоке, который никогда не выполняется, — но я ошеломлен тем, что меня также заставляют сделать его семантически правильным!

EDIT:
Хотя я не уверен, что приведенный ниже код сильно добавляет к приведенному выше коду, это еще один пример проблемы. В этом сценарии я хочу установить только значение Определенно (которое определенно существует как столбец) со значением из Может (которое, возможно, существует как столбец), если Может быть.

IF EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.TableName', 'U') AND name = 'Maybe')
BEGIN
    UPDATE dbo.TableName SET Definitely = Maybe
END

I am trying to UPDATE a specific column within a table, but I get an error due to the fact that when SQL compiles, the column name IssueTimeUTC does not actually exist. Here is my sample code:

   WHILE  @startissuetime<='23:30'
        BEGIN
        ALTER TABLE Intraday_Forecast_temp
            ADD IssueTimeUTC SMALLDATETIME 

            UPDATE Intraday_Forecast_temp
            SET IssueTimeUTC=CAST(@tempdate AS SMALLDATETIME)
            WHERE DateTimeUTC>CAST(@tempdate AS SMALLDATETIME)

            UPDATE Intraday_Forecast_temp
            SET IssueTimeUTC=Dateadd(d,-1,CAST(@tempdate AS SMALLDATETIME))
            WHERE

DateTimeUTC<=CAST(@tempdate AS SMALLDATETIME)
END

I have read multiple similar posts, but I cannot make anything work therefore I am kindly asking you if you could help me.

The error I get is this:

Msg 207, Level 16, State 1, Line 56 Invalid column name ‘IssueTimeUTC’.

Update: So basically I was not able to find an exact solution to this specific problem but I just found a way to go »around» the problem instead. So this is the updated code I used.

WHILE  @startissuetime<='23:30'
    BEGIN
        ALTER TABLE Intraday_Forecast_temp
        DROP COLUMN IssueTimeUTC 
        --------
        BULK INSERT..... 
        --------
        ALTER TABLE Intraday_Forecast_temp
        ADD IssueTimeUTC SMALLDATETIME 

        UPDATE Intraday_Forecast_temp
        SET IssueTimeUTC=CAST(@tempdate AS SMALLDATETIME)
        WHERE DateTimeUTC>CAST(@tempdate AS SMALLDATETIME)

        UPDATE Intraday_Forecast_temp
        SET IssueTimeUTC=Dateadd(d,-1,CAST(@tempdate AS SMALLDATETIME))
        WHERE DateTimeUTC<=CAST(@tempdate AS SMALLDATETIME)
    END

I know that this is not probably the most elegant solution but I initially defined the Intraday_Forecast_temp table WITH the column IssueTimeUTC , then I drop it and add it again. This way, SQL stop complaining that the column does not exist upon compilation :)

OneManPunch

0 / 0 / 0

Регистрация: 20.03.2020

Сообщений: 18

1

Недопустимое имя столбца

15.05.2021, 14:14. Показов 3206. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте. При написании запроса, возникает ошибка. Никак не могу понять в чём проблема

SQL
1
2
3
4
SELECT Код_заказчика, Дата_поставки, Количество, Стоимость_единицы_продукции, [Количество]*[Стоимость_единицы_продукции] AS 'Стоимость заказа', 
'0,2' * [Стоимость заказа] AS 'ПДВ 20%', [Стоимость заказа] + [ПДВ 20%] AS 'К оплате'
FROM Узлы INNER JOIN Заказчик 
ON Узлы.Код_узда = Код_узла;

«Недопустимое имя столбца «Стоимость заказа».
Сообщение 207, уровень 16, состояние 1, строка 2
Недопустимое имя столбца «Стоимость заказа».
Сообщение 207, уровень 16, состояние 1, строка 2
Недопустимое имя столбца «ПДВ 20%».».



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

15.05.2021, 14:14

Ответы с готовыми решениями:

Недопустимое имя столбца
Доброго времени суток!

В общем, в БД есть таблица, один столбец которой — дата в формате…

Недопустимое имя столбца
Выскакивает ошибка &quot;Недопустимое имя столбца &quot;Всего&quot;.
Уже всю голову сломал, не могу понять в чем…

Недопустимое имя столбца
Подскажите, как исправить данную ошибку, внешний ключ прописал

go
CREATE PROCEDURE IZM_Tovar…

Недопустимое имя столбца…
В SQL Server Management Studio 2010 набрала код….
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER…

3

Эксперт MS Access

17250 / 7091 / 1595

Регистрация: 21.06.2012

Сообщений: 13,335

15.05.2021, 15:55

2

Вместо ‘Стоимость заказа’ написать [Стоимость заказа] не пробовали.

Не по теме:

По всей видимости навеяно MySQL, но и там ‘ другие `



0



3466 / 2101 / 670

Регистрация: 29.05.2013

Сообщений: 9,010

15.05.2021, 16:20

3

Я тут вижу 2 непонятки:
1. ‘0,2’ * [Стоимость заказа] т.е. строка умножается на число. Уже странно.
2. [ПДВ 20%] — Процент относится к служебным символам и запрещен для использования в имени поля или псевдониме.



0



invm

3337 / 2041 / 728

Регистрация: 02.06.2013

Сообщений: 5,017

15.05.2021, 17:39

4

Цитата
Сообщение от OneManPunch
Посмотреть сообщение

Никак не могу понять в чём проблема

Проблема — в нежелании читать документацию.
https://docs.microsoft.com/ru-… rver-ver15
См. раздел «Логический порядок обработки инструкции SELECT»

T-SQL
1
2
3
4
5
6
7
8
SELECT
 Код_заказчика, Дата_поставки, Количество, Стоимость_единицы_продукции, a.[Стоимость заказа],  
 b.b.[ПДВ 20%], a.[Стоимость заказа] + b.[ПДВ 20%] AS 'К оплате'
FROM
 Узлы INNER JOIN
 Заказчик ON Узлы.Код_узда = Заказчик.Код_узла cross apply
 (select [Количество]*[Стоимость_единицы_продукции]) a([Стоимость заказа]) cross apply
 (select 0.2 * a.[Стоимость заказа]) b([ПДВ 20%]);



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

15.05.2021, 17:39

Помогаю со студенческими работами здесь

Ошибка недопустимое имя столбца
Привет. Не совсем понимаю, почему sql сервер выдает данную ошибку, можете помочь с решением данной…

Недопустимое имя столбца (Подчеркнутый текст)
Я новичек, Подскажите, запросы нормально работают, а почему имена полей подчеркнуты?

Недопустимое имя объекта
Привет всем. Вот делаю базу данных. Не буду сейчас полностью все здесь пихать. Приведу пример…

Недопустимое имя объекта
Выбивает ошибку: Сообщение 208, уровень 16, состояние 6, процедура Model_GetModels, строка 1…

Недопустимое имя объекта
Добрый день!

У меня такой вопрос, я создал таблицу STUDENT и пытаюсь сделать свой первый запрос …

Недопустимое имя объекта
С помощью запроса создала таблицу:
USE dlvr
CREATE TABLE Поставщики (КодПоставщика int PRIMARY…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

4

  • Ошибка недопустимый дескриптор устройства
  • Ошибка недопустимое имя раздела
  • Ошибка недопустимый вызов или аргумент процедуры
  • Ошибка недопустимое имя поля сводной таблицы что делать
  • Ошибка недопустимые данные 0xd vipnet