使用SQL检查表是否存在,然后是否插入来自不同表的数据?

时间:2013-07-17 20:24:19

标签: c# sql

ALTER PROC spTransferDat
@TableName nvarchar(50)
AS
EXEC('SELECT * FROM ClientGroups INTO [' + @TableName + '] ');




public void SPROC_ExecutionsTransferData()
        {
            string tablename = cboNetChannel.SelectedItem.ToString();
            SqlConnection sqlConnectionCmdString = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Rick\Documents\Visual Studio 2010\Projects\Server\database\ClientRegit.mdf;Integrated Security=True;User Instance=True");

            //Properly just transfer data to already existing table                
            string Command = "spTransferDat" + "'" + tablename + "'";

            SqlCommand sqlCommand = new SqlCommand(Command, sqlConnectionCmdString);


            sqlConnectionCmdString.Open();

            sqlCommand.ExecuteNonQuery();

            sqlConnectionCmdString.Close();
        }
public void SPROC_ExecutionsTableNaming()
        {
            try
            {
                string tablename = cboNetChannel.SelectedItem.ToString();
                SqlConnection sqlConnectionCmdString = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Rick\Documents\Visual Studio 2010\Projects\Server\database\ClientRegit.mdf;Integrated Security=True;User Instance=True");

                //Properly Defines the string for naming the table according to the systems naming scheme
                string renameCommand = "EXEC sp_rename 'NetworkAccount', " + "'" + tablename + "'";

                SqlCommand sqlRenameCommand = new SqlCommand(renameCommand, sqlConnectionCmdString);


                sqlConnectionCmdString.Open();

                sqlRenameCommand.ExecuteNonQuery();

                sqlConnectionCmdString.Close();
            }
            catch(Exception myex)
            {
                DialogResult QAnswer = MessageBox.Show("Table already exist, Do you want to just add data to table", "Data Management",  MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                //Check for command
                if (QAnswer == DialogResult.Yes)
                {
                    //transfer the data to the correct table if table already Exist
                    SPROC_ExecutionsTransferData();
                }
                else if (QAnswer == DialogResult.No)
                {
                    this.Close();
                }
            }

        }

所有SQL语句都返回错误,SQL不允许自然重复表,因此我尝试在try错误处理上调用此SQL过程,以便在未创建表的情况下将数据添加到已存在的表中。

所以会发生什么呢?我正在复制一个表,然后用sp_rename重命名表,如果表不存在,这可行但如果它存在则会出错,所以在错误上我想只插入一个数据表到另一个但由于某种原因它不工作SQL过程一直说INTO语句是一个语句错误。需要帮忙!!感谢

3 个答案:

答案 0 :(得分:0)

if exists (select 1 from information_schema.tables where table_name = 'someTable')
    -- do something
else
    -- do something else

答案 1 :(得分:0)

我很确定您正在寻找的语法更像是这样:

SELECT * INTO table FROM othertable

答案 2 :(得分:0)

我认为这是正确的代码:

ALTER PROC spTransferDat
@TableName nvarchar(50)
AS
if OBJECT_ID(@TableName) is null
  EXEC('SELECT * INTO [' + @TableName + '] FROM ClientGroups');
else 
  EXEC('insert INTO [' + @TableName + ']  select * FROM ClientGroups');