小编Luk*_*zda的帖子

如何将连接字符串作为参数发送到MsBuild以执行SQL架构比较?

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数据工具团队博客上建议的内容

sql msbuild sql-server-data-tools

7
推荐指数
1
解决办法
1123
查看次数

如何使用REPLACE()替换mysql SELECT查询中的1列中的多个值?

我有一个表格,其中包含布尔值(仅限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)

mysql sql replace

7
推荐指数
1
解决办法
2万
查看次数

JSON_CONTAINS() 与 MySQL 中的 JSON 对象数组

这是一个示例数据库“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 对象数组。

mysql sql json mysql-json

7
推荐指数
1
解决办法
2万
查看次数

从另一个存储过程动态调用存储过程

我希望能够将存储过程的名称作为字符串传递到另一个存储过程,并使用动态参数调用它.我收到了一个错误.

具体来说,我尝试过:

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'工作正常.

sql t-sql sql-server stored-procedures sql-server-2005

6
推荐指数
1
解决办法
2万
查看次数

如何获得位型列的计数?

我正在尝试使用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(*).那么如何在总体上使用一点价值呢?

sql t-sql sql-server

6
推荐指数
1
解决办法
1526
查看次数

MySQL - 选择另一列的最小值后,选择列的最小值

我有以下表(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'

mysql sql

6
推荐指数
1
解决办法
275
查看次数

SQL Server 2008 Merge 语句多匹配条件

我正在尝试以增量方式引入索赔数据。我在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。

sql t-sql sql-server merge sql-server-2008

6
推荐指数
1
解决办法
7304
查看次数

从同一个表中的逗号分隔列更新行列

我有以下表定义

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)

SQL小提琴在这里.

现在,我想分割每行的代码并填充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)

sql t-sql common-table-expression sql-server-2012

6
推荐指数
1
解决办法
179
查看次数

在Oracle中看似关键的保留视图的更新提出了ORA-01779

问题

我正在尝试将低性能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_oldaccount_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)

sql oracle merge updatable-views

6
推荐指数
1
解决办法
354
查看次数

在Power BI中映射数据库架构

我在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,我认为这将是一个很酷的起点,所以任何帮助都非常感谢!

sql t-sql sql-server powerbi

6
推荐指数
1
解决办法
317
查看次数