0

すべてのテーブル列をトラバースし、「。」の値を持つすべての列を置き換えたい SQL Server で null 値を使用します。だからここに私はいくつかのロジックを書きました。しかし、どういうわけか機能していません。

create table #AllColumns  
  (  
  ColNo int not null primary key identity(1,1),  
  ColumnName varchar(100)  
  )  
  insert into #AllColumns  
  SELECT  c.name ColumnName  
FROM sys.columns c INNER JOIN
     sys.tables t ON c.object_id = t.object_id INNER JOIN
     sys.schemas s ON t.schema_id = s.schema_id
   where t.name='TabelName'


DECLARE @i int  
DECLARE @numrows int  
DECLARE @columnName varchar(100)  
   set @i=1  
   set @numrows= (SELECT COUNT(*) FROM #AllColumns)  
   IF @numrows > 0  
    WHILE (@i <= (SELECT MAX(ColNo) FROM #AllColumns))  
    BEGIN  
        set @columnName=(select ColumnName from #AllColumns where ColNo=@i)  
        update TabelName   
        set @columnName=null  
        where @columnName='.'  
        set @i=@i+1  
    END  
drop table #AllColumns  

私が間違っているところを教えてください。

4

2 に答える 2

5

set や where などの equals の左側に変数を使用することはできません。つまり、これは合法です

update MyTable set myColumn = null;

しかし、これはそうではありません:

update MyTable set @myColumn = null;

これは、動的 SQL を使用して実現できます。つまり、SQL を文字列として構築してから実行します。何かのようなもの:

 declare @MyColumn nvarchar(max) = 'Column1';
 declare @sql = 'update MyTable set ' + @MyColumn + ' = null;'

 exec(@sql);
于 2013-11-05T22:49:42.230 に答える
0
declare @SQL nvarchar(max)
declare @Countt bigint

SELECT @SQL = STUFF(( SELECT ' ; Update ' + INFORMATION_SCHEMA.TABLES.TABLE_NAME + ' SET YourColumnName = YourValue' 

FROM INFORMATION_SCHEMA.TABLES LEFT OUTER JOIN  INFORMATION_SCHEMA.COLUMNS ON INFORMATION_SCHEMA.TABLES.TABLE_NAME = INFORMATION_SCHEMA.COLUMNS.TABLE_NAME where INFORMATION_SCHEMA.TABLES.TABLE_TYPE =N'BASE TABLE' AND INFORMATION_SCHEMA.TABLES.TABLE_NAME = N'YourTableName' AND INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME =N'YourColumnName'
FOR XML PATH('')),1,2,'')

SET @SQL = @SQL

PRINT @SQL
EXECUTE (@SQL) 
于 2014-11-26T06:09:10.667 に答える