2011-03-17 116 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