我有这个存储过程。
DECLARE @itWorks nvarchar (39)
SET @itWorks = @dbName + '.' +@tblName
INSERT INTO sampleDatabase.dbo.WorkFlowCopy
([ID]
,[ActivityDefinitionID]
,[ParentID]
,[Caption]
,[Description]
,[ShortDescription]
,[Name]
,[Order]
,[ReferenceNumber]
,[ShowOnNavigation]
,[Status]
EXEC('SELECT * FROM OPENDATASOURCE(''SQLOLEDB'',''Data Source=' + @serverName+ ';User ID='+@userID+';Password=' +@password+''').'+@itWorks+' sdb1')
UPDATE sampleDatabase.dbo.WorkFlowCopy
SET ServerName = @serverName,
DBName = @dbName
WHERE ServerName = NULL AND DBName = NULL
该查询的功能是将来自其他服务器的值插入特定数据库。这就是我使用动态查询的原因。在那个insert语句之后,我的特定数据库表中的列(ServerName,DBName)将变为NULL,因为我没有在其中插入任何值。
所以我之后使用UPDATE
查询,但它没有用。 "(0行(s)受影响)"有没有办法做到这一点?
答案 0 :(得分:3)
您的WHERE
条件不正确。 NULL
不是一个值,因此请勿与NULL
进行比较,而是使用IS NULL
/*Change*/
WHERE ServerName = NULL AND DBName = NULL
/*To*/
WHERE ServerName IS NULL AND DBName IS NULL
也就是说,在先前的SELECT
语句中设置这些值会更有效率。在任何情况下,您都应该更改SELECT *
以明确指定列值。由于架构更改,您当前的代码存在破坏的风险。因此,将ServerName和DBName添加到INSERT
并更改动态SELECT
,如下所示:
EXEC('SELECT ID,
ActivityDefinitionID,
ParentID,
...,
Status,
'+@serverName+',
'+@dbName'
FROM ...')