2011-03-17 100 views
7

我有一個sql server 2005數據庫,其中有一個數據類型位列的表。當我查看SQL Server管理工作室中的數據時,我將列值看作0或1,當我用SAS抽取時,我看到0或-1,就像SAS正在否定1值。任何人對此有解釋?謝謝。sql服務器中的SAS讀取位數據類型2005

+0

這仍然是在SAS 9.3的問題,所以我們在設計我們的表,以避免BIT數據類型。不知道爲什麼,覺得應該有一個關於此的SAS註釋.. – 2016-06-28 13:20:32

回答

5

我想你必須使用libname oledb從SAS連接到SQL Server。我能在這裏複製您的問題: -

SQL Server代碼使用OLEDB

libname imm oledb provider=sqloledb 
     properties=(
      "Integrated Security"=SSPI 
      "Persist Security Info"=False 
      "Initial Catalog"=test 
      "Data Source"=localhost 
     ); 

proc print data=imm.tbl; run; 

打印出來是生成僞數據

create table dbo.tbl (
    tblId   int identity(1,1) not null 
        constraint pk_tbl_tblId primary key, 

    bool  bit not null, 
) 
go 

insert into dbo.tbl(bool) values(0) 
insert into dbo.tbl(bool) values(1) 

SAS代碼: -

Obs   tblId bool 

1    1  0 
2    2  -1 

使用PROC的SQL代碼SQL

看起來像使用PROC SQL應該解決您的問題。

proc sql noprint; 
    connect to sqlservr (
     server='localhost' 
     database='test' 
     'Integrated Security'='SSPI' 
     'Persist Security Info'='False' 
    ); 

    create table test as 
    select * 
    from connection to sqlservr (
     select * from dbo.tbl 
    ); 

    disconnect from sqlservr; 
quit; 

proc print data=test; run; 

打印出來是: -

Obs   tblId bool 

1    1  0 
2    2  1 
+2

這將適用於我,但這將需要任何連接到數據庫與SAS的人被要求使用proc sql;我想我將不得不轉換爲tinyint,以確保數據的一致性,而不管SAS如何訪問。 – Haeflinger 2011-03-17 15:35:34