2017-05-26 12 views
0

私はpypyodbcを使用してSQL2014サーバに接続していますが、以下のクエリを実行しています。しかし、それは私のエラーメッセージを言って:Pythonで複数行のSQL文を処理する方法

pypyodbc.ProgrammingError: (u'42S22', u"[42S22] [Microsoft][SQL Server Native Cl ient 11.0][SQL Server]Invalid column name '2017-02-07'.")

私は問題なくサーバー上で私のSQLクエリを実行することができます。 長いSQL文を含めて実行する正しい方法は何ですか?

Pythonのコード:MSSQLで

result = cursor.execute(''' 
    declare @date date ="2017-02-07", 
     @env varchar (10)= "TEST", 
     @runid int, 
     @val smallint, 
     @timelen int, 
     @interface varchar(30), 
     @table_t varchar(30), 
     @del_t int, 
     @upd_t int, 
     @ins_t int 

    declare @import_test TABLE 
    (RUN_DATE date, 
    ENV varchar(10), 
    ID int, 
    [CHECK] varchar (100), 
    CODE varchar(30), 
    TABLE_NAME varchar(30), 
    VAL_1 int, 
    VAL_2 int, 
    VAL_3 int) 

    set @val=(select count(*) from MY_TABLE where convert(date,[timestamp])[email protected] and msg_cd="OK") 

    insert into @import_test values (@date,@env,null,"Check 1 (count of OK codes)",null,null,@val,null,null) 

    select * from @import_test 

    ''') 
for row in result: 
    print(row) 

答えて

0

、二重引用符で囲まれた文字列は、列名として解釈されます。 Pythonの複数行の文字列には二重引用符を使用し、SQLクオートでは一重引用符で囲む文字列を使用する必要があります。

試してみてください。

result = cursor.execute(""" 
declare @date date ='2017-02-07', 
    @env varchar (10)= 'TEST', 
    @runid int, 
    @val smallint, 
    @timelen int, 
    @interface varchar(30), 
    @table_t varchar(30), 
    @del_t int, 
    @upd_t int, 
    @ins_t int 
... 
""") 
+0

私は二重引用符に焦がす引用符を変更...しかし、それは私に** pypyodbc.ProgrammingErrorを言って別のエラーがスローされます(u'24000' 、U '[24000] [マイクロソフト] [SQL ServerネイティブCl ient 11.0]無効なカーソル状態 ')** –

関連する問題