标签: sql-server

SQL Server是否提供类似MySQL的ON DUPLICATE KEY UPDATE

在MySQL中,如果指定ON DUPLICATE KEY UPDATE且插入的行将导致UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行的UPDATE.例如,如果列a声明为UNIQUE并包含值1,则以下两个语句具有相同的效果:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;
Run Code Online (Sandbox Code Playgroud)

我不相信我在T-SQL中遇到过类似的东西.SQL Server是否提供了与MySQL的ON DUPLICATE KEY UPDATE相当的东西?

mysql t-sql sql-server

56
推荐指数
3
解决办法
5万
查看次数

合并两个没有公共字段的表

我想学习如何组合两个没有共同字段的数据库表.我已经检查了UNION,但是MSDN说:

以下是使用UNION组合两个查询的结果集的基本规则:

  1. 所有查询中列的数量和顺序必须相同.
  2. 数据类型必须兼容.

但我根本没有共同的领域.我想要的只是将它们组合在一个表中,就像一个视图.

所以我该怎么做 ?

提前致谢.

真诚.

sql-server union

56
推荐指数
5
解决办法
26万
查看次数

是否有一种优雅的方法来在SQL插入语句中反转位值?

我正在转换SQL Server中的一些数据:

INSERT INTO MYTABLE (AllowEdit)
(Select PreventEdit from SOURCETABLE)
Run Code Online (Sandbox Code Playgroud)

所以我需要从源表中反转位值.我期望NOT工作,因为这是我在代码中的方式,但事实并非如此.我能想到的最优雅的方式是:

INSERT INTO MYTABLE (AllowEdit)
(Select ABS(PreventEdit -1) from SOURCETABLE)
Run Code Online (Sandbox Code Playgroud)

有更标准的方法吗?

sql sql-server bit-manipulation

56
推荐指数
2
解决办法
2万
查看次数

Ado.net - Size属性的大小无效

我试图通过ADO.net从DB获取输出值.有一个客户端代码:

    using (var connection = new SqlConnection(ConnectionString))
    {
        connection.Open();
        SqlCommand command = new SqlCommand("pDoSomethingParamsRes", connection);
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add("@i", 1);
        var outParam = new SqlParameter("@out", SqlDbType.VarChar);
        outParam.Direction = ParameterDirection.Output;
        command.Parameters.Add(outParam);
        command.ExecuteNonQuery();
        Console.WriteLine(command.Parameters["@out"].Value.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到以下异常:

the Size property has an invalid size of 0
Run Code Online (Sandbox Code Playgroud)

根据手册SqlParameter.Size属性我可能会省略大小.为什么我会得到这个例外?如何在不通过尺寸的情况下使其工作?
谢谢您的帮助!

c# sql-server ado.net

56
推荐指数
5
解决办法
6万
查看次数

在SQL中的现有表中使用new not null列的备用表

如何在SQL Server 2005中的现有表中添加非空列?

sql-server

56
推荐指数
2
解决办法
11万
查看次数

SQL Server 2008:表中的列与现有主键或唯一约束不匹配

我需要对SQL Server 2008数据库进行一些更改.

这需要创建一个新表,并在新表中插入一个引用已存在表的主键的外键.所以我想在我的新tblTwo之间建立一个关系,它引用了tblOne的主键.

但是,当我尝试这样做(通过SQL Server Management Studio)时,我收到以下错误:

表'tblOne'中的列与现有主键或UNIQUE约束不匹配

我不确定这意味着什么,我想知道它是否有任何解决方法?

sql sql-server foreign-keys foreign-key-relationship

56
推荐指数
4
解决办法
7万
查看次数

查询以检查列是否可为空

查询以检查列是否可为空(列中是否允许空值).它应该优选返回yes/no或1/0或true/false.

sql-server nullable sql-server-2008

56
推荐指数
3
解决办法
4万
查看次数

SQL Server:如何添加新的标识列并使用ID填充列?

我有一张包含大量数据的表格.我想添加额外的列id并将其用作主键.使用1 1到1的值填充此列的更好方法是什么row count

目前我正在使用游标并逐个更新行.这需要几个小时.有没有办法更快地做到这一点?

谢谢

sql sql-server cursor primary-key

56
推荐指数
1
解决办法
12万
查看次数

右键单击SQL Server Management Studio中禁用的脚本alter table

我想将一个表脚本编写为Alter到一个新的查询编辑器窗口.但是此选项已禁用.我怎样才能做到这一点?

sql-server ssms alter-table

56
推荐指数
2
解决办法
5万
查看次数

在C#中使用存储过程输出参数

我在将输出参数从Sql Server存储过程返回到C#变量时遇到问题.我已经阅读了有关此内容的其他帖子,不仅在这里,而且在其他网站上,我无法让它工作.这是我现在拥有的.目前我只是想打印回来的价值.以下代码返回null值.我试图返回的是主键.我尝试过使用@@IDENTITY和SCOPE_INDENTITY()(即SET @NewId = SCOPE_IDENTITY()).

存储过程:

CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),

    @NewId int OUTPUT
AS
BEGIN

    INSERT into [dbo].[Contracts] (ContractNumber)
        VALUES (@ContractNumber)

    Select @NewId = Id From [dbo].[Contracts] where ContractNumber = @ContractNumber
END
Run Code Online (Sandbox Code Playgroud)

打开数据库:

pvConnectionString = "Server = Desktop-PC\\SQLEXPRESS; Database = PVDatabase; User ID = sa;
    PASSWORD = *******; Trusted_Connection = True;";

try
{
    pvConnection = new SqlConnection(pvConnectionString);
    pvConnection.Open();
}
catch (Exception e)
{
    databaseError = true;
}
Run Code Online (Sandbox Code Playgroud)

执行命令:

pvCommand = new SqlCommand("usp_InsertContract", pvConnection); …
Run Code Online (Sandbox Code Playgroud)

c# sql-server stored-procedures

56
推荐指数
2
解决办法
23万
查看次数