使用sqlcmd和setvar动态显示隐藏列

时间:2015-07-28 14:09:35

标签: sql-server sql-server-2012 sqlcmd

在从供应商的PHI系统生成数据摘录时切换EHR的显示。

到目前为止,我已在我的脚本文件中手动启用和禁用这些字段:

-- PHI enabled
SELECT  MRN
        --,HASHBYTES('SHA2_256',MRN) MRN_HASH
...
GO

-- PHI disabled
SELECT  -- MRN
        ,HASHBYTES('SHA2_256',MRN) MRN_HASH
...
GO

有没有办法动态地执行此操作?

 --
 -- disable this variable when running `SQLCMD` from command line
 -- PS> sqlcmd -E -S server -d database -i .\script.sql -v hide_phi=1
 --
:setvar hide_phi 0

:out c:\users\x\desktop\patients.csv
SELECT
       <if $(hide_phi)=0 then hide MRN>
       <if $(hide_phi)=1 then hide MRN_HASH>
...
GO

1 个答案:

答案 0 :(得分:0)

SQLCMD接受变量。您只需将变量传递到.SQL文件,然后在文件中对变量值进行条件检查。您可以使用CASE语句检查变量的值,并返回适当的值。

伪样本查询:

select "MRN" = case 
   when '$(hide_phi)' = '1' then HASHBYTES('SHA2_256', MRN) 
   else MRN
END
...
GO

或者可能是这样:

select "MRN" = case '$(hide_phi)'
   when '1' then HASHBYTES('SHA2_256', MRN) 
   else MRN
END

更多信息:https://msdn.microsoft.com/en-us/library/ms188714.aspx