相关疑难解决方法(0)

SQL Server - 事务回滚错误?

我们有一个客户端应用程序在SQL Server 2005上运行一些SQL,如下所示:

BEGIN TRAN;
INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
COMMIT TRAN;
Run Code Online (Sandbox Code Playgroud)

它由一个长字符串命令发送.

如果其中一个插入失败,或者命令的任何部分失败,SQL Server是否会回滚事务?如果它没有回滚,我是否必须发送第二个命令才能回滚?

我可以给出关于我正在使用的api和语言的细节,但我认为SQL Server应该对任何语言做出相同的响应.

sql sql-server transactions sql-server-2005

181
推荐指数
5
解决办法
18万
查看次数

使用INNER JOIN更新SQL Server中的多个表

我正在使用SQL Server并尝试使用SQL一次更新多个表:

以下查询:

update table1
set A.ORG_NAME =  @ORG_NAME, B.REF_NAME = @REF_NAME
from table1 A, table2 B
where B.ORG_ID = A.ORG_ID
and A.ORG_ID = @ORG_ID
Run Code Online (Sandbox Code Playgroud)

给出错误消息:

无法绑定多部分标识符"A.ORG_NAME".

错误消息是什么意思?

sql t-sql sql-server

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

如何在UPDATE语句中连接两个表?

请考虑以下表格:"用户"和"推文"

user_id name             tweet_id user_id tweet        spam
-----------------        ----------------------------------
1       SUSPENDED        1        1       lorem ipsum  0
2       foo              2        1       dolor        0
3       bar              3        2       samet        0
4       SUSPENDED        4        1       stunitas     0
                         5        3       hello        0
                         6        4       spamzz!      0
Run Code Online (Sandbox Code Playgroud)

我想通过将SUSPENDED用户发布的所有推文标记为垃圾邮件来更新"推文"表.因此,在上面的示例中,通过将"垃圾邮件"值从0更新为1,将tweet_id 1,2,4和6的推文标记为垃圾邮件.

我加入这两张桌子时遇到了麻烦.到现在为止,我只需要加入SELECT语句,但这似乎更麻烦:

UPDATE tweets SET spam = 1 WHERE tweets.user_id = users.user_id 
AND users.name = 'SUSPENDED'
Run Code Online (Sandbox Code Playgroud)

这肯定是行不通的......谁能指出我正确的方向?

mysql sql

8
推荐指数
1
解决办法
3万
查看次数

使用Web表单将数据插入多个表

我想知道执行以下操作的标准/最佳方式是什么:

我在asp.net中有一个表单Web应用程序并使用C#

用户将数据输入表单并单击INSERT,它将数据插入4个不同的表中.

这些领域是:

primarykey, animal, street, country
Run Code Online (Sandbox Code Playgroud)

该表格允许多个动物,多个街道和每个主键的多个国家/地区.所以,当我有这样的数据:

[1],[rhino,cat,dog],[luigi st, paul st], [russia,israel]
Run Code Online (Sandbox Code Playgroud)

我需要将它插入到这样的表中:

table1:
1,rhino
1,cat
1,dog

table2:
1,luigi st
1, paul st

table3:
1,russia
1,israel
Run Code Online (Sandbox Code Playgroud)

问题

  1. 我完全不知道如何做到这一点.如果我只有一个表和每个主键一组数据我会使用InsertQuery并以这种方式做,但因为它是多个表我不知道如何做到这一点?

  2. 我应该使用哪些控件来允许用户输入多个值?目前我只是使用文本框并考虑用半冒号分隔条目,但这可能不是正确的方法.

c# sql database asp.net sql-server-2008

6
推荐指数
1
解决办法
3900
查看次数

如何使用单个查询更新多个表

我有2个表需要更新:

表A包括:ID,personName,日期,状态

表B包括:PersonID,日期,状态

对于A中的每一行,B中可以有多行具有相同的personID

我需要"循环"来自状态= 2的A的所有结果,并将日期和状态更新为1.

此外,对于A中status = 2的每一行,我需要更新B中具有相同personID的所有行(即A.ID == B.PersonID) - 我还需要将日期和状态更新为1.

所以基本上,如果我以编程方式(或算法)执行此操作,那就是这样的:

Foreach(var itemA in A)
    If (itemA.status = 2)
        itemA.status to 1
        itemA.date = GetDate()
        foreach(var itemB in B)
            if(itemB.PersonID == itemA.ID && itemB.status != 2 )
                Change itemB.status to 1
                Change itemB.date = GetDate()
Run Code Online (Sandbox Code Playgroud)

我知道如何使用以下sql语句更新B中的所有行:

UPDATE 
   B
SET
   status = 1, 
   date = GETDATE()
FROM
    B
INNER JOIN
    A
ON
  B.PersonID = A.ID
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何更新表A,因为更新语句中不能有多个表

谢谢你的帮助

sql sql-server

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

C#和SQL Server查询错误:无法绑定多部分标识符

protected void btnSubmit_Click(object sender, EventArgs e)
{
    connectionString = ConfigurationManager.ConnectionStrings["LeaveMangementSystemCS"].ConnectionString;
    conn = new SqlConnection(connectionString);
    string sql = "UPDATE LeaveType  SET LeaveType.Type=@Type, LeaveType.Description=@Description, LeaveType.NumOfDays=@NumOfDays, LeaveCategory.Category=@Category FROM LeaveType INNER JOIN LeaveCategory on LeaveType.LeaveCategoryId = LeaveCategory.Id  WHERE LeaveType.Id=@id";

    try
    {
            cmd = new SqlCommand(sql, conn);
            cmd.Parameters.AddWithValue("@Type", tbType.Text);
            cmd.Parameters.AddWithValue("@Description", tbDescription.Text);
            cmd.Parameters.AddWithValue("@NumOfDays",tbNumOfDays.Text);
            cmd.Parameters.AddWithValue("@Category", ddlLeaveCategory.Text);
            cmd.Parameters.AddWithValue("@id", lblIdOut.Text);

            conn.Open();
            int rows = cmd.ExecuteNonQuery();

            if (rows > 0)
            {
                lblOutput.Text = " Updated successfully.";
            }
    }
    catch (Exception ex)
    {
        lblOutput.Text = "Error Message : " + ex.Message; …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server

1
推荐指数
1
解决办法
424
查看次数