这是获取数据库中所有主键列表的最佳方法 - 还是有更好的方法?
SELECT
KCU.TABLE_NAME AS Table_Name,
KCU.CONSTRAINT_NAME AS Constraint_Name,
KCU.COLUMN_NAME AS COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
ON KCU.CONSTRAINT_SCHEMA = TC.CONSTRAINT_SCHEMA
AND KCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME
AND KCU.TABLE_SCHEMA = TC.TABLE_SCHEMA
AND KCU.TABLE_NAME = TC.TABLE_NAME
WHERE
TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
ORDER BY
KCU.TABLE_SCHEMA, KCU.TABLE_NAME, KCU.CONSTRAINT_NAME
Run Code Online (Sandbox Code Playgroud) 以下查询正在更新所有(80k)记录而不是匹配(5k)的记录.有什么问题,如何纠正?
update ALAM set ALAM.CDate = (select IDCP.CDate from IDCP
where ALAM.ASID = IDCP.ASID and ALAM.AID = IDCP.AID
and ALAM.MCode = '10001')
Run Code Online (Sandbox Code Playgroud)
ALAM记录计数表=约80,000条记录IDCP记录计数表=约5,000条记录
作为附加信息:
select ALAM.ASID, ALAM.AID, ALAM.CDate
from ALAM, IDCP
where ALAM.ASID = IDCP.ASID and ALAM.AID = IDCP.AID and ALAM.MCode = '10001'
Run Code Online (Sandbox Code Playgroud)
结果5000条记录约
源表和目标表都有大约40列.要更新的行数约为20.目标表的行数约为30k.
下面有更好的(更短的查询)方法吗?
UPDATE destination_table t1
SET
field1 = (select field1 from src_table t2 where t2.pk = t1.pk),
field2 = (select field2 from src_table t2 where t2.pk = t1.pk),
...
field40 = (select field40 from src_table t2 where t2.pk = t1.pk),
WHERE EXISTS (select 1 from src_table t2 where t2.pk = t1.pk)
Run Code Online (Sandbox Code Playgroud) 有什么方法可以将SQL表中的数据从行列转换为列行?
还允许过滤器/在初始查询中应用条件的位置.
使用SQL Server 2008.
现有表具有以下列:AID(nvarchar唯一)ASID(nvarchar唯一)里程碑(M1,M2,M3 ... M100)MilestoneDate(datetime)
转置数据如下:AID,ASID,M1日期,M2日期,M3日期,M5日期
sql ×3
sql-server ×2
t-sql ×2
database ×1
join ×1
pivot ×1
primary-key ×1
sql-update ×1
transpose ×1