我必须创建一个 plsql 块,它将在表上添加一个新列(使用动态 Sql),然后它将在该新添加的列中插入一些数据。
当我执行块时,我收到一条消息,指出我的列未定义,即使它已在插入语句之前添加。
您知道什么可能导致此问题吗?
就像我的插入语句不知道已添加新列一样。
我在Using The INSERT INTO ... SET Syntax In MySQL博客中读到,您可以使用以下SET语法来插入记录。
例子:
INSERT INTO mytable SET col1= 'val1', col6= 'val6', col10='val10';
INSERT INTO mytable SET col3= 'val3', col5= 'val5', col10='val10';
INSERT INTO mytable SET col4= 'val4', col5= 'val5', col6='val6';
Run Code Online (Sandbox Code Playgroud)
是否可以仅用 1 条语句插入多行?
我有一个名为student以下各列的表,如下所示
S_id, person_id, subject_id, start_date, end_date, count
Run Code Online (Sandbox Code Playgroud)
同时,我编写了一个查询来从其他表中提取数据并将其输入到表person中
我写的查询如下所示
INSERT INTO student (S_id, person_id, subject_id, start_date, end_date, count)
SELECT
person_id
, subject_id,
, MIN(exam_start_date) AS start_date
, end_date
, COUNT(*) AS count
FROM main_table
GROUP BY person_id, subject_id, end_date
ORDER BY person_id, subject_id
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我select query仅从person_id其他列获取数据。
如何为select 语句中的列创建autoincrementor以便插入数据?serialS_id
目前,我收到一个错误
错误:“S_id”列中的空值违反了非空约束详细信息:失败的行包含 (null, 1234, 77670, 2139-04-22, 2139-04-22, 1)。
我知道 SELECT + INSERT 是一种不好的做法,可能会导致竞争条件(当一些尝试实现 upsert 行为时从插入更新反模式中学到)。
但我不知道如何避免这种情况,当我只是将数据插入表中,而没有给定列(或列的元组)的重复数据时:
IF NOT EXISTS ( SELECT TOP(1) 1 FROM [tbl_myTable] WHERE [MyNotKeyField] = 'myValue' )
BEGIN
INSERT INTO [tbl_myTable] (...) VALUES (...)
END
Run Code Online (Sandbox Code Playgroud)
我应该创建一个唯一索引并尝试插入记录吗?恐怕在这种情况下,插入失败的开销可能会更大。
PS:我从客户端应用程序(与 SQL Server 连接的 C# 应用程序)发送该命令,因此我认为临时表和 MERGE 的使用是不可能的。
考虑一个insert(iterator position, const value_type &x)调用:如果没有发生重新分配(容量!=大小),那么在向量的许多实现中我看到了这种行为:
...
template<typename _Tp, typename _Alloc>
void
vector<_Tp, _Alloc>::
_M_insert_aux(iterator __position, const _Tp& __x)
#endif
{
...
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
{
this->_M_impl.construct(this->_M_impl._M_finish,
_GLIBCXX_MOVE(*(this->_M_impl._M_finish
- 1)));
++this->_M_impl._M_finish;
#ifndef __GXX_EXPERIMENTAL_CXX0X__
_Tp __x_copy = __x;
#endif
_GLIBCXX_MOVE_BACKWARD3(__position.base(),
this->_M_impl._M_finish - 2,
this->_M_impl._M_finish - 1);
#ifndef __GXX_EXPERIMENTAL_CXX0X__
*__position = __x_copy;
...
Run Code Online (Sandbox Code Playgroud)
为什么不分配*__position给__x?创建副本不会导致额外的空间浪费吗?难道就不能避免创建副本吗?
所以我的代码如下.我没有收到任何错误,它将节点中的所有内容都放好了.但基于我的调试语句每次插入任何内容时它都会找到根.我不确定这是不对的.但根据作业的输出文件,我的答案是不同的,当涉及树的高度,遍历,我只是平坦我仍然有我的叶计数功能的麻烦.另一个故事.
基于调试语句,看起来一切都在他们应该的位置.但我想我可能需要新鲜的眼睛.我不知道我的遍历是如何改变的,因为它实际上只是我处理节点应该影响顺序,预订和后序的问题.
template <class T>
void BT<T>::insert(const T& item)
{
Node<T>* newNode;
newNode = new Node<T>(item);
insert(root, newNode);
}
template <class T>
void BT<T>::insert(struct Node<T> *&root, struct Node<T> *newNode)
{
if (root == NULL)
{
cout << "Root Found" << newNode->data << endl;
root = newNode;
}
else
{
if (newNode->data < root->data)
{
insert(root->left, newNode);
cout << "Inserting Left" << newNode-> data << endl;
}
else
{
insert(root->right, newNode);
cout << "Inserting Right" << newNode->data << endl;
}
} …Run Code Online (Sandbox Code Playgroud) 解决
来自开发人员:问题是以前版本的代码仍在写入使用手动ID而不是自动增量的表.自我注意:始终检查写入表的其他可能位置.
我们在表格中获得了重复的密钥.它们不是同时插入的(相隔6小时).
表结构:
CREATE TABLE `table_1` (
`sales_id` int(10) unsigned NOT NULL auto_increment,
`sales_revisions_id` int(10) unsigned NOT NULL default '0',
`sales_name` varchar(50) default NULL,
`recycle_id` int(10) unsigned default NULL,
PRIMARY KEY (`sales_id`),
KEY `sales_revisions_id` (`sales_revisions_id`),
KEY `sales_id` (`sales_id`),
KEY `recycle_id` (`recycle_id`)
) ENGINE= MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=26759 ;
Run Code Online (Sandbox Code Playgroud)
插入:
insert into `table_1` ( `sales_name` ) VALUES ( "Blah Blah" )
Run Code Online (Sandbox Code Playgroud)
我们使用PHP5运行MySQL 5.0.20并使用mysql_insert_id()在插入查询后立即检索插入ID.
Hy all,
不确定这里发生了什么,但如果我运行这个:
$query = 'INSERT INTO users
(`id`, `first_name`, `second_name`, `register_date`, `lastlogin_date`)
VALUES
("'. $user_id . '", "' . $first_name .'", "'. $second_name . '", "' . $date . '", "' . $date . ");';
$result = mysql_query($query);
Run Code Online (Sandbox Code Playgroud)
我得不到回报,但是如果我改成它就没关系了:
$query = 'INSERT INTO users (`id`, `first_name`, `second_name`, `register_date`, `lastlogin_date`)
VALUES ("21021212", "Joe", "Bloggs", "20090202", "20090202");';
$result = mysql_query($query);
Run Code Online (Sandbox Code Playgroud)
用户名= bigint(20)
名字= varchar(30)
第二名= varchar(30)
date = int(8)
起初我认为这是vars的一个问题,但它们完全一样,仍然无法正常工作.
任何帮助赞赏.
我在表格中有以下数据.
Name LeftId RightId
------------------------------------------
Cat 1
Cat 2
Dog 4
Dog 5
Dog 7
Dog 69
Gerbil 12 13
Run Code Online (Sandbox Code Playgroud)
我需要将它们插入到新表中...
Id Name
-------------------------------
1 Cat
2 Cat
4 Dog
5 Dog
7 Dog
69 Dog
12 Gerbil (or 13. don't care which number out of the two)
Run Code Online (Sandbox Code Playgroud)
所以字段LeftId和RightId可以包含NULLS或NVARHCAR值(即使它们被列为数字,上面......它们将始终是数字..只是导入创建字段为nvarchar(255).
如果需要,我可以修改源表字段.
有人可以帮忙吗?
我猜测insert语句中会有一个select查询并使用CASE语句.不过,我只是不确定如何做到最好.
干杯:)
我有个问题.我希望有人可以帮助我解决这个问题.
我正在为我们的客户建立一个sharepoint网站.有一个文档库("Customers"),其中每个Customer都有一个文件夹(= customername),包含4个子文件夹.子文件夹始终相同("技术信息","文档","安全信息"和"硬件").我想要发生的是每当在库中创建一个新文件夹时(即无论何时输入新客户),都会在该新文件夹中自动创建4个子文件夹.我想在db-trigger中执行此操作,我发现对于库中的每个文件夹,都会在db-table dbo.AllDocs中创建一条记录.问题是: - 该表中大约有63列,而其中一些列的目的对我来说并不清楚.- 实际上这不是一个很好的id,因为通过脚本在WSS内容数据库中写入是
有人有任何想法吗?
在此先感谢您的反馈!
insert ×10
sql ×5
mysql ×3
c++ ×2
binary-tree ×1
c# ×1
database ×1
dynamic ×1
lastinsertid ×1
oracle ×1
php ×1
plsql ×1
postgresql ×1
sharepoint ×1
sql-insert ×1
sql-server ×1
vector ×1