以编程方式向SQL Server添加多个默认值

时间:2016-09-17 04:18:36

标签: c# sql-server

我在多个数据库中有一个表,我需要更新并为该表中的多个列添加默认值。

我有以下约束要添加到表中:

ALTER TABLE ProcessQUeue
ADD CONSTRAINT C_bSaveAfter DEFAULT 0 FOR bSaveAfter;
GO 

ALTER TABLE ProcessQueue
ADD CONSTRAINT C_bForcePassword DEFAULT 0 FOR bForcePassword;
GO 

ALTER TABLE ProcessQueue
ADD CONSTRAINT C_bIsComplete DEFAULT 0 FOR bIsComplete;
GO

如果我在SQL Server Management Studio中运行上述内容;它很棒。

然后我删除了约束并尝试通过我的代码运行它:

private static string AlterTable(string szQuery, string szReferencedFileName)
{
    try
    {
        using (SqlConnection aConnection = new SqlConnection(szConnectionString))
        {
            aConnection.Open();

            using (SqlCommand dbCommand = new SqlCommand(szQuery, aConnection))
            {
                dbCommand.ExecuteNonQuery();
            }
        }
    }
    //Some usual exception handling
    catch (SqlException e)
    {
        string szMsg = e.Message.ToString() + " " + e.ErrorCode.ToString();

        if (Environment.UserInteractive)
            Console.WriteLine("\r\n" + szMsg + "\r\n - Query: " + szQuery + "\r\n - " + szConnectionString + "\r\n");

        return "ERR:SQLDB/AddTable: " + szMsg;
    }
    catch (Exception e)
    {
        string szMsg = e.Message.ToString();

        if (Environment.UserInteractive)
            Console.WriteLine("\r\n" + szMsg + "\r\n - Query: " + szQuery + "\r\n - " + szConnectionString + "\r\n");

        return "ERRex:CheckSQLDB/AddTable: " + szMsg;
    }

    return string.Empty;
}

我收到错误:

  

'go'附近的语法不正确。
  'go'附近的语法不正确。
  'for'附近的语法不正确。

在某些情况下,我必须从查询中删除GO,所以我也尝试过,语法错误从'go'变为'for'。

为什么这会在SQL Server Management Studio中工作而不在C#应用程序中?

2 个答案:

答案 0 :(得分:4)

GO无效的SQL。这就是为什么它不起作用。它只是Management Studio使用的批处理分隔符。您可以将所有这些查询放在存储过程中,也可以逐个运行它们。

答案 1 :(得分:1)

谢谢,Akshey。有了你发布的内容,我想出了在一个查询中添加多个默认值的正确语法。格式如下:

alter table ProcessQueue ADD
CONSTRAINT C_bSaveAfter DEFAULT 0 FOR bSaveAfter,
CONSTRAINT C_bForcePassword DEFAULT 0 FOR bForcePassword,
CONSTRAINT C_bIsComplete DEFAULT 0 FOR bIsComplete;