簡體   English   中英

執行插入查詢時出錯

[英]Error when executing insertion query

如何在插入之前避免重復數據。 我使用下面的代碼但是我收到了這個錯誤。

沒有為'temp'的第1列指定列名。

沒有為'temp'的第2列指定列名。

沒有為'temp'的第3列指定列名。

沒有為'temp'的第4列指定列名。

沒有為'temp'的第5列指定列名。

沒有為'temp'的第6列指定列名。

沒有為'temp'的第8列指定列名。

沒有為'temp'的第9列指定列名。

列名稱'datelist'無效。

  using (SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        {
            var fromdate = DateTime.Parse(txtfromdate.Text);
            var todate = DateTime.Parse(txttodate.Text);
            var datedif1 = (todate - fromdate).Days;

            var sqlInsert = new SqlCommand("INSERT INTO datelist ([datedif],[batch],[daywk],[semester],[weekbatch],[subject],[facultyname],[facultyid],[WeekMonth])  SELECT * from (SELECT @datedif,@batch,@daywk,@semester,@weekbatch,@subject,@facultyname,@facultyid,@weekMonth) AS temp WHERE NOT EXISTS (SELECT datelist,batch from datelist where batch=@batch and datedif=@datedif)", con2);

            var sqlParamater = sqlInsert.Parameters.Add("@datedif", SqlDbType.Date);
            var sqlParameter1 = sqlInsert.Parameters.Add("@batch", SqlDbType.NVarChar);
            var sqlParameter2 = sqlInsert.Parameters.Add("@daywk", SqlDbType.NVarChar);
            var sqlParameter3 = sqlInsert.Parameters.Add("@semester", SqlDbType.NVarChar);
            var sqlParameter4 = sqlInsert.Parameters.Add("@weekbatch", SqlDbType.NVarChar);
            var sqlParameter5 = sqlInsert.Parameters.Add("@subject", SqlDbType.NVarChar);
            var sqlParameter6 = sqlInsert.Parameters.Add("@facultyname", SqlDbType.NVarChar);
            var sqlParameter7 = sqlInsert.Parameters.Add("@facultyid", SqlDbType.NVarChar);
            var sqlParameter8 = sqlInsert.Parameters.Add("@WeekMonth", SqlDbType.NVarChar);

            con2.Open();
           // try
            //{
                for (var i = 0; i <= datedif1; i++)
                {
                    var consecutiveDate = fromdate.AddDays(i);

                    sqlParamater.Value  = consecutiveDate;
                    sqlParameter1.Value = batch1;
                    sqlParameter2.Value = dayweek;
                    sqlParameter3.Value = semester;
                    sqlParameter4.Value = weekbatch;
                    sqlParameter5.Value = subject;
                    sqlParameter6.Value = faculty;
                    sqlParameter7.Value = facultyid;
                    sqlParameter8.Value = weekmonth;

                    int s = sqlInsert.ExecuteNonQuery();
                }

            }

我承認沒有測試過這個,但是給出了錯誤消息,子查詢:

SELECT 
    @datedif,
    @batch,
    -- and so on
    @weekMonth
) AS temp

需要定義列名,因為值來自變量。

那將是:

SELECT 
    @datedif as datedif,
    @batch as batch,
    -- and so on
    @weekMonth as weekMonth
) AS temp

你得到的錯誤說明了一切。 這是因為你的內部選擇表temp需要定義所有的列名。 同樣在你的WHERE NOT EXISTS (SELECT datelist ,你使用你的表名datelist作為列名。

要修復你的錯誤,請寫這樣的sql。

INSERT INTO datelist ([datedif],[batch],[daywk],[semester],[weekbatch],[subject],[facultyname],[facultyid],[WeekMonth])  
SELECT * FROM 
(
    SELECT @datedif as datedif,@batch as batch,@daywk AS batch,@semester AS semester,@weekbatch AS weekbatch,@subject AS subject,@facultyname AS facultyname,@facultyid AS facultyid,@weekMonth AS weekMonth 
) AS temp 
 WHERE NOT EXISTS (SELECT * from datelist where batch=@batch and datedif=@datedif);

您可以選擇以下面的IF NOT EXISTS(SELECT){Insert}格式編寫查詢。 如果需要捕獲數據庫中已存在記錄的時間,則可以添加帶有RAISERROR / THROWELSE

IF NOT EXISTS(SELECT * from datelist where batch=@batch and datedif=@datedif )
BEGIN
    INSERT INTO datelist ([datedif],[batch],[daywk],[semester],[weekbatch],[subject],[facultyname],[facultyid],[WeekMonth])
    VALUES (@datedif,@batch,@daywk,@semester,@weekbatch,@subject,@facultyname,@facultyid,@weekMonth)
END
ELSE 
BEGIN
     RAISERROR('Record already exists in the table',16,1);
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM