2

私はデータベースに変更を加えており、元のデータベースで実行して行ったすべての変更を継承できるようにスクリプトを作成しています。

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'が無効です。

4

3 に答える 3

5

これを試して:

IF (select max(LEN(colName)) from tblName) = 60
BEGIN
    ALTER TABLE tblName
    ALTER COLUMN colName nvarchar(140) NOT NULL
END
GO
于 2012-08-02T11:17:23.543 に答える
4

変数として定義する必要があります

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

ただし、varcharである列は本質的に可変ではなく、データの長さを返すため、これはとにかく機能しません。sysobjectssyscolumnsテーブルを見てみるか、Information_Schema.Columns代わりに

于 2012-08-02T11:16:59.943 に答える
4

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())すると、列内の最長の文字列の長さのみが得られます。最大許容長ではありません!

于 2015-04-24T16:49:28.240 に答える