2012-08-02 47 views
1

我一直在對數據庫進行更改,並且正在創建一個腳本,以便它可以在原始數據庫上運行以繼承我所做的所有更改。如果nvarchar的長度是x,則更改它

我需要改變一個NVARCHAR的長度,但想在改變列前檢查它的長度。我在語法上苦苦掙扎,有誰能幫我解決這個問題?

SELECT LEN(colName) AS MyLength FROM tblName 
IF MyLength = 60 
BEGIN 
    ALTER TABLE tblName 
    ALTER COLUMN colName nvarchar(140) NOT NULL 
END 
GO 

如果我嘗試運行在SQL Server Management Studio中此查詢,我得到一個錯誤,指出消息:

無效的列名稱MyLength「。

回答

5

試試這個:

IF (select max(LEN(colName)) from tblName) = 60 
BEGIN 
    ALTER TABLE tblName 
    ALTER COLUMN colName nvarchar(140) NOT NULL 
END 
GO 
4

你需要將它定義爲一個變量

declare @i int 
select @i = len(colname) from table 

但因爲它返回的數據,而不是列,這是一個VARCHAR,本質上是變量的長度這無論如何都不會工作。嘗試尋找在sysobjectssyscolumns表或Information_Schema.Columns代替

3

上podiluska的回答之後,你正在尋找完整的命令是:

IF (SELECT [CHARACTER_MAXIMUM_LENGTH] FROM INFORMATION_SCHEMA.COLUMNS WHERE [COLUMN_NAME] = 'ColumnName' AND [TABLE_NAME] = 'TableName') < 140 
BEGIN 
    ALTER TABLE [dbo].[TableName] ALTER COLUMN [ColumnName] NVARCHAR(140) NOT NULL 
END 

重申,使用MAX(LEN())將只給你列中最長字符串的長度,而不是最大允許長度!

+1

這應該是正確答案 – nuander 2015-10-19 22:27:38