在SQL Server数据工具团队博客中提到,现在可以使用的MSBuild执行两个DacPacs或数据库的模式比较.但是,他们没有提到如何将连接字符串传递给源数据库和目标数据库.如果我设置参数/ p:source ="我的连接字符串"我得到错误:
MSBUILD:错误MSB4177:无效的属性.名称"初始目录"包含无效字符"".
我的PowerShell脚本发送到msbuild的命令行是:
msbuild ".\SchemaCompare.proj" /t:SqlSchemaCompare
/p:source="$sourceConnString" /p:target="$targetConnString"
/p:XmlOutput="$schemaCompareReportPath"
Run Code Online (Sandbox Code Playgroud)
SchemaCompare.proj包含SQL Server数据工具团队博客上建议的内容
我有一个表格,其中包含布尔值(仅限0和1),需要对客户端进行CSV格式化.我知道我可以做1替换像这样:
SELECT REPLACE(email, '%40', '@'),
REPLACE(name,'%20', ' '),
REPLACE(icon_clicked, 1, 'Yes')
FROM myTable
WHERE id > 1000;
Run Code Online (Sandbox Code Playgroud)
这会将1的所有值转换为'是',但如何在单个查询中为1 =>是和0 =>否这样做布尔结果存储在一个列中?我试着这样做:
SELECT REPLACE(email, '%40', '@'),
REPLACE(name,'%20', ' '),
REPLACE(icon_clicked, 1, 'Yes'),
REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
Run Code Online (Sandbox Code Playgroud)
但是这个查询为'No'字符串替换创建了一个额外的列(所以最终结果有4列,email,name,icon_clicked-> yes,icon_clicked-> no)
这是一个示例数据库“test”,其中包含一个包含 JSON 对象数组的 JSON 列“arr”
+----+----------------------------------------------------------+
| id | arr |
+----+----------------------------------------------------------+
| 1 | [{"name": "aman"}, {"name": "jay"}] |
| 2 | [{"name": "yash"}, {"name": "aman"}, {"name": "jay"}] |
+----+----------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
我想使用 JSON_CONTAINS 来了解数组中对象的特定键中是否存在值。
这是我的查询:
SELECT JSON_CONTAINS(arr, '"jay"', '$[*].name') from test WHERE id=1;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误 3149 (42000):在这种情况下,路径表达式可能不包含 * 和 ** 标记或数组范围。
我知道我可以尝试使用JSON_EXTRACT()这个,但是我在这里做错了什么?
有没有办法JSON_CONTAINS在 MySQL 中使用 JSON 对象数组。
我希望能够将存储过程的名称作为字符串传递到另一个存储过程,并使用动态参数调用它.我收到了一个错误.
具体来说,我尝试过:
create procedure test @var1 varchar(255), @var2 varchar(255) as
select 1
create procedure call_it @proc_name varchar(255)
as
declare @sp_str varchar(255)
set @sp_str = @proc_name + ' ''a'',''b'''
print @sp_str
exec @sp_str
exec call_it 'test'
Run Code Online (Sandbox Code Playgroud)
因此,过程call_it应该使用参数'a'和'b'调用过程测试.
当我运行上面的代码时,我得到:
消息2812,级别16,状态62,过程call_it,第6行无法找到存储过程'test'a','b''.
但是,运行测试'a','b'工作正常.
我正在尝试使用SEDE来确定总共授予了多少个基于标签的徽章.我的典型策略是总结:
select sum(TagBased)
from Badges
Run Code Online (Sandbox Code Playgroud)
不幸的是,因为TagBased有点值,我得到这个错误:
操作数数据类型位对于sum运算符无效.
出于绝望,我试着数:
select count(TagBased)
from Badges
Run Code Online (Sandbox Code Playgroud)
这会计算非空值的数量,在这种情况下,它们相同count(*).那么如何在总体上使用一点价值呢?
我有以下表(tablea):
x y
---------------------------
3 1
1 4
1 3
Run Code Online (Sandbox Code Playgroud)
结果我想要x = 1和y = 3(尽可能低x是最高优先级,让y尽可能低是优先级较低).所以我想要一个类似的SQL语句:
Select Min(y), x
FROM (SELECT MIN(x), y FROM tablea);
Run Code Online (Sandbox Code Playgroud)
但这给了我以下错误代码:
错误代码:1248.每个派生表必须有自己的别名
如果我尝试:
Select Min(y), x
FROM (SELECT MIN(x), y FROM tablea) as a;
Run Code Online (Sandbox Code Playgroud)
我明白了:
错误代码:1054."字段列表"中的未知列'x'
我正在尝试以增量方式引入索赔数据。我在System( varchar) 和ClaimNum( varchar)上匹配源和目标,并使用其他列的散列来检查更改。
我有我的合并语句(简化):
MERGE target
USING source ON target.System = source.System
AND target.ClaimNum = source.ClaimNum
WHEN MATCHED AND target.HashValue <> source.HashValue
THEN {update claim record data}
WHEN MATCHED AND target.HashValue = source.HashValue
THEN {update claim record as "checked"}
WHEN NOT MATCHED
THEN {insert new claim record}
Run Code Online (Sandbox Code Playgroud)
但是,我不能有 2 个匹配的条件。我还可以如何使用合并语句完成此操作?
这用于 SQL Server 2008。
我有以下表定义
CREATE TABLE _Table
(
[Pat] NVARCHAR(8),
[Codes] NVARCHAR(50),
[C1] NVARCHAR(6),
[C2] NVARCHAR(6),
[C3] NVARCHAR(6),
[C4] NVARCHAR(6),
[C5] NVARCHAR(6)
);
GO
INSERT INTO _Table ([Pat], [Codes], [C1], [C2], [C3], [C4], [C5])
VALUES
('Pat1', 'U212,Y973,Y982', null, null, null, null, null),
('Pat2', 'M653', null, null, null, null, null),
('Pat3', 'U212,Y973,Y983,Z924,Z926', null, null, null, null, null);
GO
Run Code Online (Sandbox Code Playgroud)
现在,我想分割每行的代码并填充Cn列,以便最终得到
Pat Codes C1 C2 C3 C4 C5
Pat1 'U212,Y973,Y982' U212 Y973 Y982 NULL NULL
Pat2 'M653' M653 NULL NULL NULL NULL …Run Code Online (Sandbox Code Playgroud) 我正在尝试将低性能MERGE语句重构为UPDATEOracle 12.1.0.2.0中的语句.该MERGE声明是这样的:
MERGE INTO t
USING (
SELECT t.rowid rid, u.account_no_new
FROM t, u, v
WHERE t.account_no = u.account_no_old
AND t.contract_id = v.contract_id
AND v.tenant_id = u.tenant_id
) s
ON (t.rowid = s.rid)
WHEN MATCHED THEN UPDATE SET t.account_no = s.account_no_new
Run Code Online (Sandbox Code Playgroud)
它大多是低性能的,因为对大型(100M行)表有两个昂贵的访问 t
这些是涉及的简化表:
taccount_no正在迁移其列的目标表.u迁移指令表包含account_no_old→ account_no_new映射v建模contract_id和之间的一对一关系的辅助表tenant_id架构是:
CREATE TABLE v (
contract_id NUMBER(18) NOT NULL PRIMARY KEY,
tenant_id NUMBER(18) NOT …Run Code Online (Sandbox Code Playgroud) 我在youtube上看到了一个视频,它描述了如何使用Microsoft 的AdventureWorks数据库在Power BI中轻松映射数据库模式.现在我正在尝试使用另一个数据库复制该示例.问题是我的许多列都有类似的内容,但不同的列名称带有前缀,例如pk_或fk_取决于它们所在的表.这会导致以下查询失败:
SELECT
c.TABLE_NAME
,c.COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN
(SELECT
COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY COLUMN_NAME
HAVING COUNT(*) > 1
) dupes
ON dupes.COLUMN_NAME = c.COLUMN_NAME
Run Code Online (Sandbox Code Playgroud)
有谁知道是否可以模糊匹配列名或考虑不同的前缀来使这项工作?直接向youtube OP询问了同样的问题.它也可以在reddit.com上找到,但问题仍然没有答案.
我试图围绕一些更高级的Power BI功能,同时学习一些急需的SQL,我认为这将是一个很酷的起点,所以任何帮助都非常感谢!