我需要向表中添加一个不为空且默认日期时间的新列。但我收到如下错误。我检查了多个实例,但都出现错误。
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”。
有什么解决办法吗?
在T-SQL中如何将一列分开;一个带有键,另一个带有遵循以下模式的字符串的值?
需要处理的字符串示例有:
示例 1 的预期结果是:
| 钥匙 | 价值 |
|---|---|
| 国家代码 | 我们 |
| 省份名称 | 纽约 |
| 城市名 | 老查塔姆 |
因此,我有一个发货列表,并且有订单总额和每个单独发货的总额,但我正在努力想出代码来为累计发货创建一个附加列,其中包括当前发货,加上该订单之前的所有发货。这是我到目前为止所得到的结果:
| 订单号 | 发货日期 | 合计订单 | 出货总量 | 累计出货量 | 秩 |
|---|---|---|---|---|---|
| 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 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) 我正在尝试找到一种方法来查找类似“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)
预期成绩
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 似乎在此查询中不起作用
我有两个这样的查询:
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?
在 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) 我有一个需要循环遍历的 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)
我不确定问题是否在于语法或我如何尝试做到这一点,但我不断收到错误
消息 …