首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

同志们,请问一个存储过程的有关问题。THX

2012-03-01 
同志们,请教一个存储过程的问题。THX!CREATEPROCEDUREsp_ImportData_30(@tableVARCHAR(40),/*表名*/@keyfie

同志们,请教一个存储过程的问题。THX!
CREATE   PROCEDURE   sp_ImportData_30
(
@tableVARCHAR(40),   /*表名*/  
@keyfieldVARCHAR(100),/*主键字段名,多个主键时按 '; '分割*/
@srcsqlVARCHAR(400)   /*从源表检索数据的语句,如果该语句中包含 " ' "单引号要用两个单引号表示*/
)
/*根据条件导入数据*/
AS
DECLARE   @sql   VARCHAR(2000)
DECLARE   @rtnError   INT
DECLARE   @updateDybz   VARCHAR(1000)

SET   @rtnError   =   0
/*从数据源中取出数据,并插入目的表中没有的记录*/
SET   @sql   =   'INSERT   INTO   '+@table+   '   SELECT   *   FROM   OPENROWSET( ' 'SQLOLEDB ' ', ' '172.16.99.136 ' '; ' 'sa ' '; ' 'sybasepb ' ', ' ' '   +   @srcsql

SET   @sql   =   @sql   +   ' ' '   )   AS   SOURCE     WHERE   NOT   EXISTS   (SELECT   1   FROM   '   +   @table   +   '   WHERE     1=1   '

/*取出多个主键,构造SQL语句*/
SET   @keyfield   =   LTRIM(RTRIM(@keyfield))
WHILE(CHARINDEX( '; ',@keyfield)   >   0)
BEGIN
SET   @sql   =   @sql   +   '   AND   '   +   @table   +   '. '   +   SUBSTRING(@keyfield,   1,CHARINDEX( '; ',@keyfield)-1)   +   '   =   '   +     'SOURCE. '+SUBSTRING(@keyfield,   1,CHARINDEX( '; ',@keyfield)-1)  
SET   @keyfield   =   STUFF(@keyfield,   1,   CHARINDEX( '; ',@keyfield),   ' ')
END
SET   @sql   =@sql   +     '   AND   '   +   @table   +   '. '   +@keyfield   +     '   =   '   +     'SOURCE. '+@keyfield   +   ') '

EXEC   (@sql)
IF(   @@ERROR <>   0)
SET   @rtnError   =   @@ERROR

--IF(@table   =   'L_PATIENTINFO ')/*更新样本打印标志*/
--BEGIN
--SET   @updateDybz   =     REPLACE   (@srcsql   ,SUBSTRING(@srcsql,   0,   CHARINDEX( 'WHERE ',   @srcsql))   ,   'UPDATE   L_PATIENTINFO   SET   RESULTSTATUS=4   '   )
--EXEC(@updateDybz)
--END
--PRINT(@sql)
--PRINT(@rtnError)
RETURN   @rtnError
GO

执行过程错误:
EXEC   sp_ImportData_30   'L_SAMPLETYPE ',   'SAMPLETYPE ', 'SELECT   *   FROM   lis.dbo.L_SAMPLETYPE '  

服务器:   消息   446,级别   16,状态   9,行   1
无法解决   equal   to   操作的排序规则冲突。

另外一个就没问题:
EXEC   sp_ImportData_30   'GY_KSDM ',   'KSDM ',   'SELECT   *   FROM   lis.dbo.GY_KSDM '



[解决办法]
up
[解决办法]
服务器: 消息 446,级别 16,状态 9,行 1
无法解决 equal to 操作的排序规则冲突。

==============================================

报这个错,主要是因为在Where条件中做比较的时候,两个表中要比较的字段的Collation不一致!
可以参照BOL上的Collate上的说法,为这些字段指定排序规则!
SELECT * FROM a ,b
WHERE a.cola = b.colb COLLATE [collation name]
[解决办法]
UP 楼上的.
------解决方案--------------------


改collation

热点排行