Bir Görünüm içinde bir değişken bildirmek mümkün mü? Örneğin:SQL Görünümleri - değişken yok mu?
Declare @SomeVar varchar(8) = 'something'
bana sözdizimi hatası veriyor:
Incorrect syntax near the keyword 'Declare'.
Bir Görünüm içinde bir değişken bildirmek mümkün mü? Örneğin:SQL Görünümleri - değişken yok mu?
Declare @SomeVar varchar(8) = 'something'
bana sözdizimi hatası veriyor:
Incorrect syntax near the keyword 'Declare'.
Siz haklısınız. Yerel değişkenlere bir GÖRÜNÜM'de izin verilmez.
Bir sonuç kümesi döndüren bir tablo değerli fonksiyonu yerel bir değişken, set (a görünüşüdür yaptığı gibi.)
http://msdn.microsoft.com/en-us/library/ms191165.aspx
ör
CREATE FUNCTION dbo.udf_foo()
RETURNS @ret TABLE (col INT)
AS
BEGIN
DECLARE @myvar INT;
SELECT @myvar = 1;
INSERT INTO @ret SELECT @myvar;
RETURN;
END;
GO
SELECT * FROM dbo.udf_foo();
GO
Evet bu doğrudur, sen görünümler değişkenleri olamaz (diğer kısıtlamalar da vardır).
Görüntüleme sonuç bir select deyimi ile değiştirilebilir durumlar için kullanılabilir.
bir tablo işlevi seçkin bir açıklamada değiştirilebilir ve üzeri
daCREATE VIEW vwImportant_Users AS WITH params AS ( SELECT varType='%Admin%', varMinStatus=1) SELECT status, name FROM sys.sysusers, params WHERE status > varMinStatus OR name LIKE varType SELECT * FROM vwImportant_Users
da
WITH params AS (SELECT varType='%Admin%', varMinStatus=1) SELECT status, name FROM sys.sysusers INNER JOIN params ON 1=1 WHERE status > varMinStatus OR name LIKE varType
JOIN
aracılığıyla: Burada değişkenin isimleri önbelleğe CTE kullanan bir çalışma örneği yerel değişkenlere sahiptir. –
JeffO
@JeffO - işaret ettiğinden emin değilsiniz. – Hogan
Seçme ifadesi yerel değişkenlere sahip olamayacağından beri bir görüş belirtebilir misiniz? – JeffO
DÜZENLEME: Ben @bummi tarafından belirttiği gibi, yanlış benim önceki cevap üzerine bir CTE kullanarak çalıştı. Bu seçenek yerine çalışmalıdır:
SELECT st.Value, Constants.CONSTANT_ONE, Constants.CONSTANT_TWO
FROM SomeTable st
CROSS APPLY (
SELECT 'Value1' AS CONSTANT_ONE,
'Value2' AS CONSTANT_TWO
) Constants
Düzeltme için teşekkürler - bunun yerine CROSS UYGULAMASI'nı kullanmak için güncellendi. –
Bu çalışır, ancak Çapraz Uygulamanın sütunları her satır için yeniden başlatılmıyor mu? Özellikle hesaplanan değerler için büyük bir performans kaybı anlamına gelir. Yerel Değişken ve CTE'nin bir Görünümde mevcut olmaması çok üzücü, kimse fikrini neden? –
Ne yapmam tablo değişkeni olarak ve aynı seçme gerçekleştiren bir görünüm oluşturmak geçerli:
İşte bu soruna işin türüne, GEÇERLİ bir ÇAPRAZ kullanarak tek seçenek Bu görünümü ikinci görünüme bağla. Böylece bir görünüm başka bir görünümden seçebilir. sözü spencer7593 dinamik veriler için doğru bir yaklaşımdır gibi bu işlevlerini kullanma aynı sonucu
Ben, bu çok küçük tablolar ile uğraşmadıkça bir performans sorununa neden olabilir. – logixologist
ulaşır. Statik veriler için, SQL veri tasarımı ile tutarlı olan daha performanslı bir yaklaşım (sprocs'taki masif prosedürel kodun anti-desenine karşı), statik değerlerle ayrı bir tablo oluşturmak ve ona katılmaktır. Bu, SQL Engine bir JOIN etrafında etkili yürütme planları oluşturabildiğinden ve gerektiğinde dizin ekleme potansiyeline sahip olduğunuzdan, bu bir performans perspektifinden son derece faydalıdır.
fonksiyonları kullanmanın dezavantajı (veya herhangi bir satır içi hesaplanmış değerler) ek bilgi masraflı olan, dönen her potansiyel satır için tekrarlanır. Niye ya? Çünkü SQL ilk önce hesaplanan değerlerle tam bir veri kümesi oluşturmalı ve ardından WHERE yan tümcesini bu veri kümesine uygulamalıdır.
dokuzu on üzerinden size sorgularda dinamik hesaplanan hücre değerlerini gerekmez. İhtiyacınız olan şeyi anlayabilmek için çok daha iyi, daha sonra bunu destekleyen bir veri modeli tasarlayın ve bu veri modelini yarı dinamik verisiyle doldurun (örneğin toplu iş yoluyla) ve ağır yükü kaldırmak için SQL Engine'i kullanın. standart SQL
Sen ifadelerini tanımlamak için İLE kullanabilirsiniz. Daha sonra bu tanımlara erişmek için basit bir Alt-SELECT yapın.
CREATE VIEW MyView
AS
WITH MyVars (SomeVar, Var2)
AS (
SELECT
'something' AS 'SomeVar',
123 AS 'Var2'
)
SELECT *
FROM MyTable
WHERE x = (SELECT SomeVar FROM MyVars)
@datenstation doğru konsepti vardı.CROSS APPLY
WITH params AS (SELECT varType='%Admin%', varMinStatus=1)
SELECT status, name
FROM sys.sysusers CROSS APPLY params
WHERE status > varMinStatus OR name LIKE varType
İşleri nasıl bu kadar korkunç yaparlar? Bazen sadece Microsoft Sertifikalandırılabilir Profesyonelleri işe aldıklarını düşünüyorum. –
Ben bir kullanıcı kavramını yenen ve bu sertifikasyon için sizi bekleyen bir çanta konsepti ile değiştiren bir kurgu olduğunu hayal ediyorum – user1566694