2016-03-29 12 views
1

Dil tablosum var ve belirtilen tabloya göre bu tablodaki takma adları seçmek istiyorum.Takma ad, sql sunucusundaki bir tablodan nasıl seçilir?

ALTER PROCEDURE sp_executesql 
(@parameter1 NVARCHAR(MAX) 
,@parameter2 NVARCHAR(MAX) 
,@code NVARCHAR(MAX),@language NVARCHAR(MAX)) 

DECLARE @sql NVARCHAR(MAX) 

SET @sql = 'SELECT '[email protected]+' AS (SELECT @language FROM Languages WHERE code=somecolumn) '[email protected]+' AS (SELECT @language FROM Languages WHERE code='[email protected]+') FROM mytable' 

DÜZENLEME: saklı yordam, böyle bir şey gerekiyor. O şekilde bir takma ad oluşturmak için bir alt sorgu kullanamazsınız

+1

dan uygun sütun adıyla LanguageColumn değiştirin. Sadece imkansız olmakla kalmaz, bunun gibi bir şeyin her durumda nasıl yararlı olabileceğini görmüyorum. Bu tür bir şeyin sunum katmanında yapılması gerekiyor. –

+0

[SQL SQL kullanmadan T-SQL Dinamik takma adı] 'nın olası kopyası (http://stackoverflow.com/questions/15072322/t-sql-dynamic-alias-without-using-dynamic-sql) –

+0

errr. Yeni başlayanlar için 'sp_executesql' adını kullanmayın - dinamik sql yürütmek için kullanılan yerleşik bir saklı yordam! İkinci nokta - cevabımdan ne 1 yerine 2 parametreyi desteklemek için adapte değil misiniz? – Jamiec

cevap

1

bu deneyin:

CREATE PROCEDURE sp_NameOfSP 
(@parameter1 NVARCHAR(MAX) 
,@parameter2 NVARCHAR(MAX) 
,@code NVARCHAR(MAX) 
,@language NVARCHAR(MAX)) 
AS 
BEGIN 
DECLARE @sql NVARCHAR(MAX) 

SELECT TOP(1) @language=LanguageColumn FROM Languages WHERE code=somecolumn 

SET @sql = 'SELECT '[email protected]+' AS '[email protected]+', ' 

SELECT TOP(1) @language=LanguageColumn FROM Languages WHERE [email protected] 

SET @[email protected][email protected]+' AS '[email protected]+' FROM mytable' 

EXEC(@SQL) 
END 

değil dinamik Sql kullanmadan Languages masanın

3

cevapları için

Teşekkür .., bunu yapmak için dinamik sql kullanmak gerekir.

DECLARE @language NVARCHAR(255) -- or whatever type your field is 
SELECT @language=language FROM Languages WHERE [email protected] 

DECLARE @sql NVARCHAR(MAX) = 'SELECT ' + @parameter1 + ' AS ' + QUOTENAME(@language) + ' FROM MyTable' 
EXEC sp_executesql @sql 

(takma ad etrafında QUOTENAME dahil Not - bu, takma adları geçersiz karakterler sahip olması durumunda bir güvenlik özelliğidir.)

Sen saklanan içindeki ikinci parametre için yukarıdaki kodu tekrar edebilirsiniz prosedür.

+0

Bunu saklı bir yordamda yapmaya çalışıyorum ve dinamik sql kullanmayı denedim, ancak sonuç hiç değişmedi. –

+0

@AlicanUzun Sorunu, – Jamiec

+0

ile ilgili sorun yaşadığınız saklı yordamla güncellemenizi öneririm. Takma adın tablodan gelmesinden dolayı "QUOTENAME" ile yanıtın güncelleştirilmesi, alan adı veya özel adın diğer adla elde edilme olasılığı vardır. Bu yüzden güncellenmiş umudunuz yok –

İlgili konular