2016-07-17 24 views
-2

私のテーブルに4列ありますSurnameFirstNameMiddleNameCurrAddressです。配列を使用して列名を動的に格納し、各列の最大長を取得する方法はありますか?たとえば、4つのフィールドのうち、SurnameFirstNameの最大長のみが必要です。以下の私のコードはトランザクションごとに1つの列しか表示しません。どんな助けでも大歓迎です。ありがとうございました!配列を使用してSQL Server列の最大長を取得します

ALTER PROCEDURE [dbo].[sp_getColumnLength] 
    @colval nvarchar(50), 
    @tblval nvarchar(50) 
AS 
BEGIN 
    SELECT 
     character_maximum_length as 'Max Length' 
    FROM 
     information_schema.columns 
    WHERE 
     column_name = @colval 
     AND table_name = @tblval 
END 
GO 
+0

'column_name = @ colval'でフィルタリングすると、トランザクションごとに1つのカラムが返されます。あなたは本当にテーブルの最大長フィールドを取得したいですか? – Arulkumar

+1

サイドノート:ストアドプロシージャのプレフィックス 'sp_'を**使用しないでください**。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –

答えて

0

あなたは、配列の代わりに、テーブル値パラメータを使用することができますが、マイクロソフトでhttps://msdn.microsoft.com/en-gb/library/bb510489(v=sql.110).aspx

例を参照してください私のために動作しませんでしたが、次のコードは

USE AdventureWorksdw2012; 
GO 

/* Create a table type. */ 
drop type t1 
go 
CREATE TYPE t1 AS TABLE 
(tabname CHAR(50) 
, colname char(50)); 
GO 

/* Create a procedure to receive data for the table-valued parameter. */ 
CREATE PROCEDURE dbo. usp_InsertProductionLocation 
    @TVP [db_datareader].[t1] readonly 
    AS 

BEGIN 
    SELECT 
     character_maximum_length as 'Max Length' 
    FROM 
     @TVP 
    join information_schema.columns on table_name = tabname and column_name = colname 

END 
GO 

/* Declare a variable that references the type. */ 
DECLARE @TVP AS t1; 

/* Add data to the table variable. */ 
insert into @TVP values ('dimcustomer','title'),('dimcustomer','firstname') 

/* Pass the table variable data to a stored procedure. */ 
EXEC usp_InsertProductionLocation @TVP; 
GO 

マイクロソフトの例と思われる問題t1はストアドプロシージャ内で完全修飾されている必要があります。

0

あなたは、このためのネイティブ機能を持っている:

 select COL_LENGTH('TABLENAME', 'COLUMNNAME') 
関連する問題