PDA

View Full Version : مبتدی: اینتر در sql



undefined
جمعه 19 آذر 1389, 21:53 عصر
با سلام
دوستان من میخوام از دستور زیر در C#.Net استفاده کنم البته نسخه SQL Server هم 2005 استفاده میکنم .
مشکلی که دارم اینه که باید بعد از بعضی از دستور ها اینتر بزنم که متاسفانه نمیتونم . مانند دستور Create و غیره .
ممنون میشم راهنمایی کنید .

Rezahak
جمعه 19 آذر 1389, 22:04 عصر
اصلا منظورتون واضح نیست لطفا بیشتر توضیح بدهید!!!!

undefined
جمعه 19 آذر 1389, 22:14 عصر
عذر میخوام فراموش کردم کد را اضافه کنم
کد C#

sql = "IF OBJECT_ID('t', 'V') IS NOT NULL"
+ " BEGIN"
+ " DROP VIEW [t]"
+ " END"
+ " CREATE VIEW [t]"
+ " AS"
+ " " + sql
+ " SELECT *"
+ " FROM (SELECT ROW_NUMBER() OVER(" + sqlOrder + ") AS"
+ " rownum, * FROM [t]) AS Salaries1"
+ " WHERE rownum between " + pageSart + " and " + pageEnd
+ " DROP VIEW [t]";

کد SQL

IF OBJECT_ID('t', 'V') IS NOT NULL BEGIN DROP VIEW [t] END CREATE VIEW [t] AS select (select top 1 id from test WHERE mah = S.mah ) as id , (select top 1 sharh from test WHERE mah = S.mah ) as sharh , SUM(mablagh) as mablagh , mah from test S WHERE sharh like ''%ی%'' group by mah SELECT * FROM (SELECT ROW_NUMBER() OVER( order by S.mablagh DESC) AS rownum, * FROM [t]) AS Salaries1 WHERE rownum between 1 and 6 DROP VIEW [t]

همین کد SQL رو که تست کنید میبینید که بر روی creat ایراد میگیره .
اینم بگم که از \r\n و تابع Char هم استفاده کردم اما متاسفانه نشد .

Rezahak
جمعه 19 آذر 1389, 22:26 عصر
خب دوست عزیز شما تمام این کد را در قالب یک stored procedure در sql server ذخیره کن و وقتی خواستی در c# یا هر زبان برنامه نویسی دیگری آنرا اجرا کنی فقط کافی است نام آن sp را صدا بزنی - البته با استفاده از شیء sqlcommand

undefined
جمعه 19 آذر 1389, 22:28 عصر
متاسفانه دستور ORDER در SP به درستی جواب نمیده .
یعنی اصلا مرتب نمیکنه . :افسرده:

Rezahak
جمعه 19 آذر 1389, 22:57 عصر
متاسفانه دستور ORDER در SP به درستی جواب نمیده .
یعنی اصلا مرتب نمیکنه . :افسرده:
این چیزی که شما نوشتید اصلا صحت ندارد!!!

undefined
جمعه 19 آذر 1389, 23:17 عصر
دوست من تست کردم که میگم :ناراحت:
این هم SPی که نوشتم

create proc report_generator_paging
@pageNo int,
@rowCount int,
@sql varchar(8000),
@order varchar(90)
as
begin
EXEC('
CREATE VIEW [t]
AS
'+@sql+'
')
SELECT *
FROM (SELECT ROW_NUMBER() OVER(order by @order) AS
rownum, * FROM t) AS Salaries1
WHERE rownum between((@pageNo)*@rowCount)+1 and ((@pageNo+1)*@rowCount)
DROP VIEW [t]
end
GO

Rezahak
جمعه 19 آذر 1389, 23:46 عصر
دوست عزیز این کدی رو که نوشتی یه ذره سختش کردی شما یا View باید بنویسی یا SP .
شما می تونی یک VIEW درست کنی و بدون توجه به شرایط و پارامترها آنرا به طور کلی ایجاد کنی و هر وقت خواستی در برنامه آنرا صدا بزنی شرایط را بر حسب پارامترهای دریافتی اعمال کرده و مرتب سازی کنی
یا این که در این مورد که نوشتید یک function جدید با مقدار برگشتی table ایجاد کرده و تمام پارامترها رادر آن منظور کنید و در برنامه آن function را صدا بزنید

حمیدرضاصادقیان
شنبه 20 آذر 1389, 06:45 صبح
order by @order

شما باید Query دوم هم به صورت dynamic sql بنویسید. زیرا order اینجا یک فیلده و مقدار نیست که شما به صورت مستقیم در عبارت order by به کار بردید. به همین خاطره که اجرا نمیشه.
اگر کوئری دوم هم با استفاده از exec بنویسید مشکل حل میشه.
موفق باشید

undefined
شنبه 20 آذر 1389, 09:27 صبح
دوست عزیز این کدی رو که نوشتی یه ذره سختش کردی شما یا View باید بنویسی یا SP .
شما می تونی یک VIEW درست کنی و بدون توجه به شرایط و پارامترها آنرا به طور کلی ایجاد کنی و هر وقت خواستی در برنامه آنرا صدا بزنی شرایط را بر حسب پارامترهای دریافتی اعمال کرده و مرتب سازی کنی
یا این که در این مورد که نوشتید یک function جدید با مقدار برگشتی table ایجاد کرده و تمام پارامترها رادر آن منظور کنید و در برنامه آن function را صدا بزنید

ابتدا از جناب صادقیان تشکر میکنم بخاطر راهنمایی بی نقصشون .
راستش به خاطر شرایت خاصی که در برنامه دارم بهترین راه (البته در تا جایی که آموخته هام کمکم میکنه) همینه که استفاده کردم چون Query داینامیک ساخته میشن و معمولا دسته بندی هم دارن .
با تشکر