标签: sql-server-2016

空间查询:执行用户定义的例程或聚合“地理”期间发生 .NET Framework 错误:

我正在尝试从空间查询(SQL Server 2016)创建参数化存储过程。当参数(@long/经度)被硬编码时(例如 174.7115),底层空间查询工作正常。

当我尝试使用经度 ( ) 参数创建存储过程时,@long出现以下错误。

消息 6522,级别 16,状态 1,过程 Spatial8,第 5 行 [批处理起始行 0] 在执行用户定义的例程或聚合“地理”期间发生 .NET Framework 错误: System.FormatException:24141:需要一个数字输入的位置11。输入有@Long。System.FormatException:在 Microsoft.SqlServer.Types.WellKnownTextReader.RecognizeDouble() 在 Microsoft.SqlServer.Types.WellKnownTextReader.ParsePointText(Boolean parseParentheses) 在 Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType 类型) 在 Microsoft.SqlServer.Types .WellKnownTextReader.Read(OpenGisType 类型,Int32 srid)在 Microsoft.SqlServer.Types.SqlGeography.ParseText(OpenGisType 类型,SqlChars taggedText,Int32 srid)在 Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType 类型,SqlChars taggedText,Int32 srid) ) ................................

这是存储过程..

CREATE PROC Spatial8 @Long decimal(9,6)
AS
DECLARE @Car geography;
SET @Car = geography::STGeomFromText ('Point(@Long -36.81143)', 4326);

/* Add 20m buffer to each side of the cars position (Lat and long) */ …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server stored-procedures spatial-query sql-server-2016

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

如何从 SQL Server 2016 中的表中删除字符串中的重复项

我得到一个包含一列字符串的表。这些字符串由 分隔;。现在我想在字符串分割后删除重复项。例如:

-----------
| w;w;e;e |
-----------
| q;r;r;q |
-----------
| b;n;n;b |
-----------
Run Code Online (Sandbox Code Playgroud)

结果应该是:

-------
| w;e |
-------
| q;r |
-------
| b;n |
-------
Run Code Online (Sandbox Code Playgroud)

而且它不应该是一个Select函数,而是一个(不是 100% 确定)delete函数。因此原始表中的值将不再重复。

sql sql-server sql-server-2016

3
推荐指数
1
解决办法
3479
查看次数

SQL Server 仅读取有效 JSON 中的第一行

我的 JSON 如下所示。ADF 可以毫无问题地读取此 JSON 并导入所有行。

{"Row":{"Col1":"Val1", "Col2":"Val2"}}
{"Row":{"Col1":"Val1", "Col2":"Val2"}}
{"Row":{"Col1":"Val1", "Col2":"Val2"}}
Run Code Online (Sandbox Code Playgroud)

但是,当我使用下面的查询从 SQL 读取此内容时,它仅返回第一条记录。

SELECT * FROM OPENJSON(@JSONDATA, '$')
with (
    Col1 varchar(25) '$.Row.Col1'
);
Run Code Online (Sandbox Code Playgroud)

你知道为什么吗?

json sql-server-2016 azure-sql-database

3
推荐指数
1
解决办法
4545
查看次数

如何在 DAX 中的日期时间中添加或减去秒数

我有一个日期时间列和一个代表秒数的 int 列。我想计算两者的总和。

例如:

2017-08-01 18:00:00 + 180(秒)= 2017-08-01 18:03:00

DAX DateAdd 函数仅支持添加年/月/日,而不支持秒,所以我被卡住了!

dax ssas-tabular sql-server-2016

3
推荐指数
1
解决办法
7321
查看次数

将多个 SQL 列合并为 1 个 json 列

我是查询和使用 JSON 字段的新手。我做了一些研究,但我找到的大部分信息都是关于从 JSON 到行和列的查询。我的问题是相反的:

假设我有一个包含 3 列的表:(年龄、选择、城市)。现在我想添加一列 JSON 格式。我试过:

SELECT Age, Optin, City
INTO #JSON_Table
FROM MyTable
FOR JSON AUTO
Run Code Online (Sandbox Code Playgroud)

错误消息:消息 13602,级别 16,状态 1,第 30 行 SELECT INTO 语句中不允许使用 FOR JSON 子句。

我知道这些都是很基本的东西,但我需要一些帮助。

t-sql sql-server json sql-server-2016

3
推荐指数
1
解决办法
2999
查看次数

如何检查视图是否存在,如果不存在则创建

如果 SQL Server 2016 中不存在,我想创建一个视图

IF EXISTS(SELECT 1 FROM sys.views 
     WHERE Name = 'VI_ALL_CITIES_AS_CATEGORY')
BEGIN
CREATE VIEW VI_ALL_CITIES_AS_CATEGORY AS
    SELECT PERSONS.FIRST_NAME AS '???', PERSONS.LAST_NAME AS '???????', CITIES.CITY_NAME AS '????'
    FROM CITIES
    LEFT JOIN PERSONS ON CITIES.ID = PERSONS.CITY_ID ;
END
Run Code Online (Sandbox Code Playgroud)

但它给了我错误:

语法不正确:“CREATE VIEW”必须是批处理中的唯一语句。

sql sql-server ssms sql-server-2016

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

如何在 SQL Server 中从多个布尔列中检查至少一个为真或所有列值都为假

表格格式:

+---------+---------+-----------------+
| column1 | column2 | column3| column4| 
+---------+---------+-----------------+
| value1  | true    | true   | false  |
| value2  | true    | false  | true   |
| value4  | false   | false  | false  |
+---------+---------+-----------------+
Run Code Online (Sandbox Code Playgroud)

第 1 到 4 列的数据类型为布尔值。

我想检查所有这些布尔列值是否为假或至少一个列值为真。

有没有更好的方法来使用 SQL Server 查询来做到这一点?预期输出:

+---------+---------+-----------------+
| column1 | column2 | column3| column4| 
+---------+---------+-----------------+
| value1  | true    | true   | false  | = true
| value2  | true    | false  | true   | = true
| …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016

3
推荐指数
1
解决办法
5084
查看次数

无法在 Visual Studio 2015 中使用“AT TIME ZONE”构建 SQL Server 项目

在 SQL Server 2016 中按预期执行的 AT TIME ZONE 查询。但如果我在 Visual Studio 2015 的 SQL Server 项目中添加相同的查询,则会出现构建错误

“AT TIME ZONE”附近的语法不正确。

代码:

DECLARE @Result DATETIME
DECLARE @InputDate DATETIME
        @TimeZone NVARCHAR(50)    

SET @Result = @InputDate AT TIME ZONE @TimeZone AT TIME ZONE 'UTC'
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决这个问题?

timezone utc visual-studio-2015 sql-server-2016

3
推荐指数
1
解决办法
1741
查看次数

对 JSON 数据使用 MERGE 命令

是否可以直接使用 JSON 更新表,而无需插入临时表?

下面的代码将数据插入临时表并更新原始表。

DECLARE @TempTelecommunicationsNumber AS TABLE (RoleID INT,Number VARCHAR(100),Ext VARCHAR(100))
INSERT INTO @TempTelecommunicationsNumber (RoleID,Number,Ext)
 SELECT     @RoleID, Number,Ext
 FROM       OPENJSON(@TelecommunicationsNumber)
 WITH       (RoleID INT, Number NVARCHAR(256), Ext NVARCHAR(256))

            MERGE Party.TelecommunicationsNumber original
            USING @TempTelecommunicationsNumber modified
            ON (original.RoleID = modified.RoleID)
            WHEN MATCHED
                THEN UPDATE SET
                original.Number = modified.Number,
                original.Ext = modified.Ext
            WHEN NOT MATCHED BY TARGET
                THEN INSERT (RoleID,Number,Ext)
                VALUES (@RoleID,modified.Number,modified.Ext);
Run Code Online (Sandbox Code Playgroud)

有没有办法直接更新如下。

MERGE Party.TelecommunicationsNumber original
USING OPENJSON(@Json) modified
ON (original.RoleID = modified.RoleID)
WHEN MATCHED
    THEN UPDATE SET
    original.Number = modified.Number,
    original.Ext = …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server json sql-server-2016

3
推荐指数
1
解决办法
1284
查看次数

如何将 SQL Server 2016 GETDATE() 函数输出转换为 MMM dd、yyyy?

我正在编写一个存储过程,在其中使用GETDATE()并填充报告中的输出来获取今天的日期,其中日期格式应类似于Jan 19,2020但我得到的输出类似于2020-01-19。有人可以在这里帮助我。我尝试了很多方法,但无济于事。

我写了这段代码:

  DECLARE @v_current_date date;

  SELECT @v_current_date = CONVERT(varchar, GETDATE(), 107);
Run Code Online (Sandbox Code Playgroud)

另一个,我从存储数据的表中获取日期yyyy-MM-dd,我想将其转换为2020 年 1 月 19 日

DECLARE @v_updated_date varchar(1000);

SELECT @v_updated_date = last_updated_date 
FROM us_year_expenditure
WHERE tax_id = @v_each_tax_id
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?谢谢你。

sql database sql-server-2016

3
推荐指数
1
解决办法
34
查看次数