标签: t-sql

SQL Server 中必须声明标量变量“ ”错误

我需要向表中添加一个不为空且默认日期时间的新列。但我收到如下错误。我检查了多个实例,但都出现错误。

DECLARE @SQL NVARCHAR(1000), @date NVARCHAR(1000);
SET @date = '9999-12-31 00:00:00.000'

SET @SQL = 'ALTER TABLE [spi].[ProductClass]
                ADD lastUpdatedTime datetime NOT NULL
                    CONSTRAINT default_updateTime DEFAULT @date';

EXEC sp_executesql @SQL;
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误。

必须声明标量变量“@date”。

有什么解决办法吗?

sql t-sql sql-server

0
推荐指数
1
解决办法
1541
查看次数

分离出键值对

在T-SQL中如何将一列分开;一个带有键,另一个带有遵循以下模式的字符串的值?

需要处理的字符串示例有:

  1. Country_code:“US”province_name:“NY”city_name:“Old Chatham”
  2. 邮政编码:“11746-8031”国家/地区代码:“美国”省名:“纽约”街道地址:“151 米勒街北”城市名称:“迪克斯山”
  3. street_address:“1036 Main Street,霍尔布鲁克,NY 11741”

示例 1 的预期结果是:

钥匙 价值
国家代码 我们
省份名称 纽约
城市名 老查塔姆

sql t-sql sql-server

0
推荐指数
1
解决办法
279
查看次数

如何使用窗口函数根据日期或排名列聚合数据?

因此,我有一个发货列表,并且有订单总额和每个单独发货的总额,但我正在努力想出代码来为累计发货创建一个附加列,其中包括当前发货,加上该订单之前的所有发货。这是我到目前为止所得到的结果:

订单号 发货日期 合计订单 出货总量 累计出货量
22396 2022-04-04 639,964 2,983 639,966 3
22396 2022-03-31 639,964 5,626 639,966 2
22396 2022-02-24 639,964 631,355 639,966 1

因此,这是同一订单的 3 次单独发货。第 3 行中的第一次发货是正确的,但我需要第 2 行的累计发货列是两者的发货总和,因此 631,555 美元 + 5,626 美元。按照相同的逻辑,第 1 行应该是所有 3 行的总和,此时将等于订单总额 639,964 美元。看起来是这样的:

订单号 发货日期 合计订单 出货总量 累计出货量
22396 2022-04-04 639,964 2,983 639,964 3
22396 2022-03-31 639,964 5,626 636,981 2
22396 2022-02-24 639,964 631,355 631,355 1

我假设实现此目的的最佳方法是使用 over(partition by ()),但我正在努力想出代码。这是我到目前为止所拥有的:

SELECT
    OrderNo,
    ShipDate,
    OrderTotal,
    [Shipment Total],
    SUM([Shipment Total]) OVER(PARTITION …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server window-functions

0
推荐指数
1
解决办法
602
查看次数

问题 where 子句 FOR JSON AUTO 生成了不完整的答案

从 SQL Server 获取 JSON 很棒,但我遇到了问题。例子。我有一个LithologySamples具有非常基本结构的表:

    [Id] [uniqueidentifier],
    [Depth1] [real],
    [Depth2] [real],
    [RockId] [nvarchar](8),
Run Code Online (Sandbox Code Playgroud)

数据库中该表大约有 600 条记录。我想生成 JSON 以将数据传输到另一个数据库,因此我使用FOR JSON AUTO. 这与其他记录较少的表完美配合。但在这种情况下,我发现生成的响应不完整。让我很困惑。我在检查输出时注意到:

    [Id] [uniqueidentifier],
    [Depth1] [real],
    [Depth2] [real],
    [RockId] [nvarchar](8),
Run Code Online (Sandbox Code Playgroud)

我已经搜索过,但找不到任何选项来完整地给出答案。

SQL查询如下:

[{
        "Id": "77769039-B2B7-E511-8279-DC85DEFBF2B6",
        "Depth1": 4.2000000e+001,
        "Depth2": 5.8000000e+001,
        "RockId": "MIC SST"
    }, {
        "Id": "78769039-B2B7-E511-8279-DC85DEFBF2B6",
        "Depth1": 5.8000000e+001,
        "Depth2": 6.3000000e+001,
        "RockId": "CGL"
    }, {
        "Id": "79769039-B2B7-E511-8279-DC85DEFBF2B6",
        "Depth1": 6.3000000e+001,
        "Depth2": 8.3000000e+001,
        "RockId": "MIC SST"
    }, {
// ... OK, continue fine, but it breaks off towards the …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

0
推荐指数
1
解决办法
1105
查看次数

在 SQL 中查找递增或递减 1 的值

我正在尝试找到一种方法来查找类似“1234”、“12345”、“9876”、“7654”等的字符串。因此,具有向上或向下连续数字的值。3 个字符(例如 123、321)到 10 个字符(0123456789、9876543210)之间的任意字符

INSERT INTO #TmpTbl 
Values ('12345')
,('45678')
,('44569')
,('987654')
,('748376')
,('123')
,('0123456789')
,('9876543210')
Run Code Online (Sandbox Code Playgroud)

预期成绩

  • 12345
  • 45678
  • 987654
  • 123
  • 0123456789
  • 9876543210

sql t-sql sql-server

0
推荐指数
1
解决办法
174
查看次数

OBJECT_DEFINITION (Transact-SQL) - 从 nvarchar(max) 结果中修剪尾随和前导空行

SQL Server 函数OBJECT_DEFINITION (Transact-SQL)返回一个 nvarchar(max)

例如这个 SQL:

select 
    name,
    --modify_date,
    object_definition(object_id) as SQLText
 from sys.procedures 
where schema_id = 1
Run Code Online (Sandbox Code Playgroud)

我想知道如何处理结果nvarchar(max)?例如,我如何修剪尾随和前导空行?

TRIM 似乎在此查询中不起作用

t-sql sql-server

0
推荐指数
1
解决办法
197
查看次数

计算 SQL Server 列中 NULL 的数量

我有两个这样的查询:

SELECT MyId, MyColumn FROM MyTable WHERE MyColumn IS NULL;
SELECT count(MyColumn) as MyCount FROM MyTable WHERE MyColumn IS NULL;
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

MyId    MyColumn
10      NULL
Run Code Online (Sandbox Code Playgroud)

为什么第二个查询中计数总是0?

sql t-sql sql-server

0
推荐指数
1
解决办法
261
查看次数

如何为每个用户 ID 向表中插入一行

在 MSSQL 中,我有一个codes包含列userid和 的表code。表中有很多行,就像

userid | code 
1      | A
2      | A
3      | B
4      | A
4      | B
Run Code Online (Sandbox Code Playgroud)

我想在代码列中为每个userid没有的代码插入 B。在我的示例中,它适用于用户 ID 1 和 2。

如何动态插入这个?

INSERT INTO 
    codes (userid, code) 
VALUES 
    (1, B), 
    (2, B);
Run Code Online (Sandbox Code Playgroud)

预期结果是:

userid | code 
1      | A
1      | B
2      | A
2      | B
3      | B
4      | A
4      | B
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

0
推荐指数
1
解决办法
434
查看次数

查询 SQL group by 每下一行是否具有相同的值?

如果下一列的值相同的话如何分组,稍后我会计算购买需要多长时间,稍后按组添加

在此输入图像描述

sql t-sql sql-server gaps-and-islands

0
推荐指数
1
解决办法
413
查看次数

如何在 SQL Server 中循环遍历 ID 列表

我有一个需要循环遍历的 id 列表,例如在插入语句中使用

我在这里建了表:

DECLARE @ProductIds TABLE (ID nvarchar(1000))

INSERT INTO @ProductIds (ID)
    SELECT ProductTypeId FROM ProductType

DECLARE MY_CURSOR CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY FOR 
    SELECT DISTINCT Id 
    FROM @ProductIds

OPEN MY_CURSOR

FETCH NEXT FROM MY_CURSOR INTO @ProductIds

WHILE @@FETCH_STATUS = 0
BEGIN 
    --each so basically each productId is used in the @ProductId parameter below
    INSERT INTO myProducts (ProductTypeId, prodDesc, Value) 
    VALUES (@ProductId, 'CA1BBFC3-35EA-4984-BCD1-9E0EB385E4BE', 0)

    PRINT @ProductIds

    FETCH NEXT FROM MY_CURSOR INTO @ProductIds
END

CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
Run Code Online (Sandbox Code Playgroud)

我不确定问题是否在于语法或我如何尝试做到这一点,但我不断收到错误

消息 …

sql t-sql sql-server

0
推荐指数
1
解决办法
970
查看次数

标签 统计

sql-server ×10

t-sql ×10

sql ×8

gaps-and-islands ×1

window-functions ×1