2016-04-05 39 views
0

Bu kod:T-SQL 2012

SELECT * FROM sysobjects WHERE type = 'P' AND name = 'proc_name' 

bir Sql 2000'de yordamını 'proc_name' bulur, ancak SQL Server 2012 bir varyasyon için değil benziyor ki bu, tarih:

SELECT * FROM sys.objects WHERE object_id = OBJECT_ID 
(N'ap_tems_delete_temp_itinerary_item]') AND type IN (N'P', N'PC') 

Ayrıca

Sql 2012'de çalışmıyor ne çalışır?

AÇIKLANMASI DÜZENLENMİŞ

sorunun noktası kimse bu şablonu kullandığında şudur: Bir saklı yordam oluşturma komut dosyası oluşturmak için Visual Studio

IF EXISTS (select * from sys.procedures where name = '$SchemaQualifiedObjectName$') 
BEGIN 
    DROP Procedure $SchemaQualifiedObjectName$ 
END 

, bu adını üretir köşeli parantez içinde prosedür, [dbo] ile kalifiye. saklı yordam oluşturma için bu komut çalıştırıldığında Ve bu işe yaramazsa: saklı yordam adı dbo veya köşeli ayraç içermediğinden

IF EXISTS (select * from sys.procedures where name = '[dbo].[stored_proc_name]') 
BEGIN 
    DROP Procedure [dbo].[stored_proc_name] 
END 

olduğunu. Onları düzenlemek zorundayım, ama zorunda kalmak istemiyorum. OBJECT_ID() kullanarak biçimi aslında çalışır, ancak bir köşeli parantez uyumsuzluğuna sahip olduğunuzda değil, bu benim sorunumun gerçekte ne olduğu ve @ Ebis'in işaret ettiği şeydir.

Ben select * from sys.procedures where name = 'stored_proc_name' çalışır biliyoruz - ama köşeli parantez mevcut değilse.

cevap

1

- $ SchemaQualifiedObjectName $ [dbo] oluşturduğunda, bu aslında çalışmıyor

SELECT Object_ID FROM sys.objects 
WHERE object_id = OBJECT_ID (N'[ap_tems_delete_temp_itinerary_item]') 
SELECT Object_ID FROM sys.objects 
WHERE object_id = OBJECT_ID (N'ap_tems_delete_temp_itinerary_item') 
+0

Bu cevap aslında benim sözdizimi hatasını yakaladı - parantez uyumsuzluğu! – Cyberherbalist

0

SQL 2005 yılından bu yana, Microsoft sistemleri gibi sistem nesnesi için daha yapısal adlandırmayı kullanmaya başladı ***

kolay yoludur.

select * from sys.procedures where name = 'proc_name' 
+0

... Her iki parantez arasına ya da onları uzak izin [stored_proc_name].. Oysa * object_id = OBJECT_ID (N '[ap_tems_delete_temp_itinerary_item]') * çalışır. Bu çizgi için katil olan köşeli parantezler. – Cyberherbalist

+0

Neden çalışmadığını söylediğini anlamıyorum. Az önce "select * from sys.procedures from name = 'rptusp_TDRTrend'" komutunu çalıştırdım ve doğru sonucu verdi. – FLICKER

+0

Köşeli parantezler ile ilgili kısmı gördünüz mü? Visual Studio'da oluşturduğum komut dosyasında saklı yordamın adı '[dbo]. [Sproc_name]' olarak karşımıza çıkıyor. Köşeli parantezleri ve dbo'yu kaldırırsam çalışır, ancak bu manuel bir adımdır. Köşeleri ve dbo'yu bırakırken bile işe yarayacak bir şeye ihtiyacım vardı. – Cyberherbalist

0
Bu kullanabilirsiniz

,

SELECT * 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_NAME = 'PROCEDURE_NAME' 
     AND ROUTINE_TYPE = 'PROCEDURE' 
Muhtemelen en iyi yolu, doğrudan (bunu önleyebilirsiniz zaman hangi her zaman tercih edilir) SQL Server sistem tabloları sorgulama olmadan ınformatıon_schema kullanıyor
0

:

Select * 
From Information_Schema.Routines 
Where Routine_Type = 'Procedure' And Routine_Name = 'proc_name"