2017-05-26 21 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代碼:

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

在MSSQL中,字符串由雙引號被解釋爲列名。您需要在單引號的SQL查詢中爲Python多行字符串和環繞字符串使用雙引號。

嘗試:

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 Native Cl 第11.0節]無效的遊標狀態')** –

相關問題