我有程序使用SQL Server管理对象(SMO)为Microsoft SQL Server数据库生成DDL脚本.但是,根据服务器和数据库,我会收到表的默认约束的不一致输出.有时它们与CREATE TABLE声明一致,有时它们是独立的ALTER TABLE声明.我意识到两者都是有效且正确的SQL语句,但是如果没有一致性,它会阻止多个数据库的输出之间的自动比较,并阻止将输出添加到源控件以跟踪数据库模式的更改.如何确保默认约束的脚本输出的一致性?
代码应该是直截了当的.打开服务器和数据库,然后为每个数据库对象生成单独的脚本文件,再生成一个包含整个数据库脚本的文件.我省略了很多错误检查和数据库对象,它们似乎已经生成了一致的输出.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using System.Data.SqlClient;
using System.IO;
using System.Configuration;
using System.Runtime.Serialization;
using System.Data;
namespace Stackoverflow.Sample
{
class Program
{
public static void CreateScripts(SqlConnectionStringBuilder source, string destination)
{
Server sv = new Server(source.DataSource);
sv.ConnectionContext.LoginSecure = false;
sv.ConnectionContext.Login = source.UserID;
sv.ConnectionContext.Password = source.Password;
sv.ConnectionContext.ConnectionString = source.ConnectionString;
Database db = sv.Databases[source.InitialCatalog];
ScriptingOptions options = new ScriptingOptions();
options.ScriptData = false;
options.ScriptDrops = …Run Code Online (Sandbox Code Playgroud) 我有一个有效的加权选择算法,但我想在两个方面(按重要性顺序)改进它:
编辑:为了我的目的,请求的数量通常很小(小于100).因此,具有复杂度O(t)或O(t + n)的算法,其中t是项的总数,由于O(t) > O(m),通常比O(nm)表现更差.
简化代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
public class Program
{
static void Main(string[] args)
{
// List of items with discrete availability
// In this example there is a total of 244 discrete items and 3 types,
// but there could be millions of items and …Run Code Online (Sandbox Code Playgroud)