我正在尝试从空间查询(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
我得到一个包含一列字符串的表。这些字符串由 分隔;。现在我想在字符串分割后删除重复项。例如:
-----------
| 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函数。因此原始表中的值将不再重复。
我的 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)
你知道为什么吗?
我有一个日期时间列和一个代表秒数的 int 列。我想计算两者的总和。
例如:
2017-08-01 18:00:00 + 180(秒)= 2017-08-01 18:03:00
DAX DateAdd 函数仅支持添加年/月/日,而不支持秒,所以我被卡住了!
我是查询和使用 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 子句。
我知道这些都是很基本的东西,但我需要一些帮助。
如果 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”必须是批处理中的唯一语句。
表格格式:
+---------+---------+-----------------+
| 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 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)
谁能帮我解决这个问题?
是否可以直接使用 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) 我正在编写一个存储过程,在其中使用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-server-2016 ×10
sql-server ×6
json ×3
sql ×3
t-sql ×3
database ×1
dax ×1
ssas-tabular ×1
ssms ×1
timezone ×1
utc ×1