我有一个INSERT查询,我希望DB返回刚刚插入的行的ID.
sqlString = "INSERT INTO MagicBoxes (OwnerID, Key, Name, Permissions, Active, LastUpdated) VALUES (@OwnerID, @BoxKey, @BoxName, 0, 1, @Date) SET @ID = SCOPE_IDENTITY();";
cmd = new SqlCommand(sqlString, con);
cmd.Parameters.AddWithValue("@OwnerID", OwnerID);
cmd.Parameters.AddWithValue("@BoxKey", BoxKey);
cmd.Parameters.AddWithValue("@BoxName", BoxName);
cmd.Parameters.AddWithValue("@Username", Username);
cmd.Parameters.AddWithValue("@Date", DateTime.Now);
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
我目前有这个,我不确定接下来我需要做什么......
我有点诙谐的问题.比如说,我在一个存在主键的表中插入了一些包含一些数据的行.如何"选择"刚刚插入的行的主键?
我应该更具体,并提到我目前正在使用SQLite.
我有一个ObservableCollection项目绑定到我的视图中的列表控件.
我有一种情况需要在集合的开头添加一大块值.
Collection<T>.Insertdocumentation将每个插入指定为O(n)操作,每个插入也生成一个CollectionChanged通知.
因此,我理想地希望在一次移动中插入整个范围的项目,这意味着只有一个基础列表的随机播放,并且希望有一个CollectionChanged通知(可能是"重置").
Collection<T>不公开任何执行此操作的方法.List<T>有InsertRange(),但是IList<T>,这Collection<T>暴露了通过其Items属性不会.
有没有办法做到这一点?
我有一张名为map_tags:
map_id | map_license | map_desc
Run Code Online (Sandbox Code Playgroud)
另一个table(widgets),其记录包含对记录的外键引用(1到1)map_tags:
widget_id | map_id | widget_name
Run Code Online (Sandbox Code Playgroud)
鉴于所有map_licenses都是唯一的约束(但是没有设置为键map_tags),那么如果我有a map_license和a widget_name,我想widgets在同一个SQL语句的所有内部执行插入:
INSERT INTO
widgets w
(
map_id,
widget_name
)
VALUES (
(
SELECT
mt.map_id
FROM
map_tags mt
WHERE
// This should work and return a single record because map_license is unique
mt.map_license = '12345'
),
'Bupo'
)
Run Code Online (Sandbox Code Playgroud)
我相信我走在正确的轨道上但是马上知道这对于Postgres来说这是不正确的SQL.有没有人知道实现这样一个查询的正确方法?
我想创建一个Insert触发器,如果它们为null,则更新所有插入行的值,根据inserted表中的另一列,新值应从不同的表中获取.
我试过了:
UPDATE INSERTED
SET TheColumnToBeUpdated =
(
SELECT TheValueCol FROM AnotherTable.ValueCol
WHERE AnotherTable.ValudCol1 = INSERTED.ValueCol1
)
WHERE ValueCol IS NULL
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
Msg 286, Level 16, State 1, Procedure ThisTable_INSERT, Line 15
The logical tables INSERTED and DELETED cannot be updated.
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
也许我没有看到树木,但我被卡住了,所以问题是:
如何将逗号分隔的varchar值列表导入/插入到表中?我的意思不是这样的:
'12345678,87654321,11223344'
但是这个:'12345678','87654321','11223344' 我有一个Split功能,但在这种情况下似乎没用,不是吗?
这是一个简单的(模拟SQL)示例来显示我的意思:
Create Table #IMEIS(
imei varchar(15)
)
INTO INTO #IMEIS(imei)
SELECT * FROM ('012251000362843', '012251001084784', '012251001168744', '012273007269862', '012291000080227', '012291000383084', '012291000448515')
SELECT * from #IMEIS
DROP TABLE #IMEIS;
Run Code Online (Sandbox Code Playgroud)
先感谢您.
使用"'"时插入失败.示例字符串是:他是个男孩.我试图使用转义符号跳过"'",但我相信这不是正确的方法.
textBox3.Text.Replace("'", " \'");
string sql= "insert into gtable (1text,1memo) values ('"+textBox3.Text+"',null)";
OleDbCommand cmd = new OleDbCommand(sql, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Run Code Online (Sandbox Code Playgroud)
我确实可以选择用"`"替换"'",但这也会改变数据库中的文本.我希望保持"'"相同,并将其插入到数据库中.
所以我有两张这样的桌子......
ext_words
-------------
| id | word |
-------------
| 1 | this |
-------------
| 2 | that |
-------------
| 3 | this |
-------------
ext_words_count
---------------------
| id | word | count |
---------------------
| 1 | this | 2 |
---------------------
| 2 | that | 1 |
---------------------
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个触发器,它将:
ext_words_count.count时ext_words.word更新.使事情进一步复杂化,
ext_words.word在更新ext_words_count时不存在ext_words,我想将其插入ext_words_count并设置count为1.我一直在寻找类似的问题:
1. 使用自动增量字段插入触发器之前/之后,以及
2. 使用触发器更新另一个数据库中的表来
尝试组合2.这是我到目前为止所拥有的:
DELIMITER $$ …Run Code Online (Sandbox Code Playgroud) 请原谅我,因为我对SQL比较陌生.但我试图从一个表上的SELECT查询中获取修改后的数据,并使用它将数据填充到另一个表中.
SELECT ID FROM TABLE WHERE VALUE=10
Run Code Online (Sandbox Code Playgroud)
我想将结果ID插入另一个表中,但修改后的值为:
1stString.ID.2ndString
Run Code Online (Sandbox Code Playgroud)
我已经找到了如何在插入中使用SELECT中的ID的答案,但是在尝试连接时我似乎无法使其工作.我正在插入其他值,但它们是文字(我正在尝试初始化另一个表中给出的ID的默认键设置.
使用MS SQL Studio 2008,顺便说一句.
insert ×10
sql ×5
c# ×3
triggers ×2
append ×1
collections ×1
database ×1
file ×1
mysql ×1
performance ×1
perl ×1
postgresql ×1
primary-key ×1
row ×1
sql-server ×1
sqlite ×1
subquery ×1
t-sql ×1