【问题标题】:Azure Data Warehouse Error while inserting GETDATE() to a datetime column将 GETDATE() 插入日期时间列时出现 Azure 数据仓库错误
【发布时间】:2019-02-07 23:03:18
【问题描述】:

我正在尝试将当前日期插入 Azure SQL 数据仓库中的 datetime 列,但出现以下错误。

CREATE TABLE TEST (MYTEXT VARCHAR(15), MYDATE DATETIME); 

INSERT INTO TEST (MYTEXT, MYDATE) 
VALUES ('ABCD', GETDATE());

消息 104334,第 16 级,状态 1,第 11 行
插入值语句只能包含常量文字值或变量引用。

【问题讨论】:

  • 好吧,GETDATE() 既不是常量字面值也不是变量引用。请改用INSERT .. SELECT
  • 您能详细说明一下吗?同样的语句在 SQL Server 中也有效。
  • @user2263025,它现在可以工作,但在过去,SQL Server 也会触发类似的错误。也许 ADW 对INSERT INTO 的要求比常规数据引擎更严格
  • 而且 Azure SQL 数据仓库不是 SQL Server。相同的产品系列,不完全相同的实现。实际上,在 SQL Server 2017 的 sys.messages 中找不到该特定错误消息。docs 可能与提及这一点有关(他们只提及不同的语法,但该语法提及 expression,没有任何限制关于表达式类型)。
  • 那么,如何将当前日期插入 ADW 中的日期时间列?

标签: sql sql-server sql-insert


【解决方案1】:

消息 104334,第 16 级,状态 1,第 11 行
插入值语句只能包含 constant literal 值或 variable 引用。

DECLARE @Date DATETIME;
SET @Date = GETDATE();

INSERT INTO TEST (MYTEXT, MYDATE) 
VALUES ('ABCD', @Date);

第一个值是常量字面量,第二个是变量

【讨论】:

  • 足够好了。但我有一种情况,我希望 Azure 流分析写入这个数据库。意思是,我没有定义变量等的特权。需要一个直接的 SQL 来插入这个值:-)
  • 然后为该列创建一个默认值并在 INSERT - DEFAULT (GETDATE()) 中省略它
  • 这又是一个挑战。消息 104338,级别 16,状态 1,第 16 行 表达式不能与默认约束一起使用。仅指定默认约束的常量
  • 那么也许 Jeroen 的建议是一种可行的方法:插入..选择
  • 所以真正的问题是:如何将时间戳从 Azure 流分析插入 SQL DW?这与您最初的问题相去甚远。你试过这个:docs.microsoft.com/en-us/stream-analytics-query/…
【解决方案2】:

在 Azure Synapse(以前称为 Azure 数据仓库)上,插入值只能是常量文字或变量引用。您可以将值设置为变量或更简单:

CREATE TABLE TEST (MYTEXT VARCHAR(15), MYDATE DATETIME); 

INSERT INTO TEST (MYTEXT, MYDATE) 
SELECT 'ABCD', GETDATE() AS DATETIME;

【讨论】:

    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 2012-04-04
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    相关资源
    最近更新 更多