如何使用azuredatabricks笔记本jdbc在sql数据库中插入/更新数据



我从AZ Databricks Notebook中得到了很多在sql中附加/覆盖表的例子。但没有单一的方法可以直接更新,使用查询或其他方式插入数据。

前任。我想更新(标识列(ID=1143的所有行,所以我需要注意的步骤是

val srMaster = "(SELECT ID, userid,statusid,bloburl,changedby FROM SRMaster WHERE ID = 1143) srMaster"
val srMasterTable = spark.read.jdbc(url=jdbcUrl, table=srMaster, 
properties=connectionProperties)
srMasterTable.createOrReplaceTempView("srMasterTable")
val srMasterTableUpdated = spark.sql("SELECT userid,statusid,bloburl,140 AS changedby FROM srMasterTable")

import org.apache.spark.sql.SaveMode
srMasterTableUpdated.write.mode(SaveMode.Overwrite)
.jdbc(jdbcUrl, "[dbo].[SRMaster]", connectionProperties)

有没有其他足够的方法来实现这一点。

注意:上面的代码也不能作为SQLServerException: Could not drop object 'dbo.SRMaster' because it is referenced by a FOREIGN KEY constraint.工作,所以它看起来像是删除表并重新创建。。。根本不是解决方案。

您可以使用FROM语句使用insert。

示例:更新此表中某列匹配的另一个表中的值

INSERT INTO srMaster
FROM srMasterTable SELECT userid,statusid,bloburl,140 WHERE ID = 1143;

在现有列值之一与匹配的行中插入新值

UPDATE srMaster SET userid = 1, statusid = 2, bloburl = 'https://url', changedby ='user' WHERE ID = '1143'

只插入多个值

INSERT INTO srMaster VALUES
(1, 10, 'https://url1','user1'),
(2, 11, 'https://url2','user2');

在SQL Server中,如果表被FOREIGN KEY约束引用,则不能删除该表。您必须先删除子表,然后再删除父表,或者删除外键约束。

对于父表,可以使用以下查询来获取外键约束名称和引用表名称:

SELECT name AS 'Foreign Key Constraint Name', 
OBJECT_SCHEMA_NAME(parent_object_id) + '.' + OBJECT_NAME(parent_object_id) AS 'Child Table'
FROM sys.foreign_keys 
WHERE OBJECT_SCHEMA_NAME(referenced_object_id) = 'dbo' AND 
OBJECT_NAME(referenced_object_id) = 'PARENT_TABLE'

然后,您可以使用以下语句更改子表并按其名称删除约束:

ALTER TABLE dbo.childtable DROP CONSTRAINT FK_NAME;

最新更新